两个应用程序中的jar冲突 - maven-shade-plugin重定位

时间:2018-01-18 16:30:26

标签: java spring maven maven-shade-plugin

我需要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版本替换它吗?

1 个答案:

答案 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>