使用 maven-shaded-plugin 安装 über jar



我一直在使用maven组装插件来创建uber jar并部署到Artifactory。我改用maven shade插件来屏蔽一些依赖项。现在,我的jar在安装阶段没有部署。

在maven汇编插件文档中:

创建程序集时,它将使用assemblyId作为工件的分类器,并将创建的程序集附加到项目,以便在安装时将其上载到存储库中和部署阶段。

这不是着色插件的情况。如何配置maven pom来部署用shaded插件创建的uber jar?

您必须告诉maven shade插件附加阴影工件,这可以通过:完成

<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.2</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<shadedArtifactAttached>true</shadedArtifactAttached>
<shadedClassifierName>jackofall</shadedClassifierName> <!-- Any name that makes sense -->
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
...
</project>

我也遇到了这个问题,mvn install会在我的目标目录中构建一个着色的jar,但会将非着色的jar安装到我的本地Maven存储库中。

最终证明原因是我在maven shade插件配置中定义了<finalName>。这最终将着色jar保存在该特定名称下,而非着色jar则使用默认jar名称,mvn install在安装时必须查找该名称。在没有<finalName>的情况下,它将着色的jar适当地复制到本地Maven存储库中。

使用<shadedArtifactAttached>,我可以安装带阴影的jar,但只能用shadedClassifierName作为后缀,而非带阴影的jar以正常的工件名称存在,这导致依赖它的库会选择带阴影的罐子而不是带阴影的(在这种情况下,这不是我想要的,因为我正在构建一个带阴影的依赖关系的库(。

最新更新