我需要maven-shade-plugin的帮助。 我有一个应用程序A,它计划添加应用程序B的客户端。问题是,应用程序A和应用程序B都使用一个库(让我们称之为冲突-lib)但不同的版本。我无法更改任何这些应用程序中的版本,因为它们依赖于不同版本的Jersey。 我被告知maven-shade-plugin应该可以解决这个问题。 我查了几个例子并阅读了文档,但我还没有完全理解它是如何工作的。
我在应用程序“B”的pom.xml中添加了以下代码段。 我将在应用程序A中添加应用程序B依赖项。我是否需要添加变换器?有什么需要添加/排除的吗?提前致谢。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<minimizeJar>true</minimizeJar>
<relocations>
<relocation>
<pattern>com.conflict.lib</pattern>
<shadedPattern>shaded.com.conflict.lib</shadedPattern>
</relocation>
</relocations>
</configuration>
</execution>
</executions>
</plugin>
现在如何运作?当我运行mvn install时,我在下面的控制台中看到
Replacing original artifact with shaded artifact.
[INFO] Replacing /Users/.../application-b-client/target/application-b-client-1.0.2-SNAPSHOT.jar with /Users/.../application-b-client/target/application-b-client-1.0.2-SNAPSHOT-**shaded**.jar
[INFO] Dependency-reduced POM written at: /Users/.../application-b-client/dependency-reduced-pom.xml
此着色的工件不在我的.m2文件夹中。它只是在我的项目目标文件夹中。我应该在应用程序“A”的pom.xml中放入什么? 目前我只是:
<dependency>
<groupId>com.my</groupId>
<artifactId>application-b-client</artifactId>
<version>1.0.2-SNAPSHOT</version>
</dependency>
我应该用1.0.2-SNAPSHOT.shaded版本替换它吗?
答案 0 :(得分:0)
这对我来说一见钟情。
阴影.jar 替换原始.jar - 所以不要指望在您的存储库中找到它们。
如果一切按预期进行,那么application-b-client-1.0.2-SNAPSHOT.jar
文件中应该有一个名为“shaded”的包,用于保存重定位的包。那不是这样吗?
修改:
此客户端jar也在其他项目中使用,但是 非阴影版
如果您(或客户)稍后需要原始{和{1}},您可以添加以下配置:
.jar
而不是替换原始内容,这将使阴影<shadedArtifactAttached>true</shadedArtifactAttached>
<shadedClassifierName>shaded</shadedClassifierName>
附加附加到原始内容。
然后,您可以使用以下任一项来要求工件:
.jar
-OR -
<!-- This is the original non-shaded artifact -->
<dependency>
<groupId>com.my</groupId>
<artifactId>application-b-client</artifactId>
<version>1.0.2-SNAPSHOT</version>
</dependency>