这应该很容易,但我在maven-install插件中遇到了奇怪的行为。
我需要将一些常见的依赖项重新打包到我的项目中以避免依赖冲突。为此,我使用了配置了重定位的shade插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<id>do_shade</id>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<createDependencyReducedPom>true</createDependencyReducedPom>
<shadedArtifactAttached>false</shadedArtifactAttached>
<createSourcesJar>true</createSourcesJar>
<relocations>
<relocation>
<pattern>com.google.common</pattern>
<shadedPattern>com.myproject.google.common</shadedPattern>
</relocation>
<relocation>
<pattern>org.apache.commons</pattern>
<shadedPattern>com.myproject.commons</shadedPattern>
</relocation>
</relocations>
</configuration>
</execution>
</executions>
</plugin>
shade插件正确地完成了它的工作并生成了阴影工件 com.myproject-myproject-.jar 和dependecy-reduced pom文件。 但是然后安装插件安装了原始工件(没有依赖项)而不是带阴影的。
此外,在安装插件问题之前,我的CI服务器(jenkins)构建了项目并且正确发布了阴影工件和依赖关系缩减了pom到nexus存储库(!!)。所以现在我从nexus下载工件,我的本地存储库中有正确的jar,但是如果我使用安装插件,则罐子不会很好。
有没有人有类似的问题?有谁知道如何解决它们?
答案 0 :(得分:0)
要回答我自己的问题,问题是我后来标记了所提供的依赖关系,以便他们不会被传递到我的其他项目中。这导致阴影插件不包含在阴影罐中。
答案 1 :(得分:0)
我也遇到了这个问题,其中 mvn install
会在我的目标目录中构建一个着色的 jar,但将非着色的 jar 安装到我的本地 Maven 存储库中。
最终证明的原因是我在 maven-shade-plugin 配置中定义了 <finalName>
。最终以该特定名称保存了阴影 jar,而非阴影 jar 使用默认的 jar 名称,mvn install
在安装时必须查找该名称。在没有 <finalName>
的情况下,它会将着色的 jar 适当地复制到本地 Maven 存储库中。