我有一个maven项目,它使用maven-shade插件将公共代码库jar捆绑到我制作的几个分布式软件插件中。
这些插件都是针对同一主应用程序的 - 所以当有人使用多个插件时,它会成为一个问题,因为每个插件都有一个着色的lib副本,而且它们并不总是使用相同的版本。
我不知道如何解决这个问题。有没有办法我可以配置maven来制作两个版本 - 一个是阴影库,一个没有?对于没有的人,我们只提供作为单独资源所需的库的一个副本。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.1</version>
<configuration>
<artifactSet>
<includes>
// our common lib
</includes>
</artifactSet>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
答案 0 :(得分:0)
只需更改shade插件的finalName
配置属性即可。见here。它只是覆盖了您的原始包裹。如果更改输出名称,则将保留两个包。
您可以使用类似
的内容<configuration>
...
<finalName>${build.finalName}-nodep.jar</finalName>
</configuration>
您也可以更改outputFile
或outputDirectory
此外,如果您想保留原始工件名称,但使用分类器集shadedArtifactAttached
到true
。
答案 1 :(得分:0)
我的问题的解决方案是relocate
我正在着色的类,因此他们不会加载在其他jar中找到的副本:
http://maven.apache.org/plugins/maven-shade-plugin/examples/class-relocation.html