Maven构建了两个副本:一个有lib阴影,一个没有

时间:2014-08-04 16:28:39

标签: java maven

我有一个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>

2 个答案:

答案 0 :(得分:0)

只需更改shade插件的finalName配置属性即可。见here。它只是覆盖了您的原始包裹。如果更改输出名称,则将保留两个包。

您可以使用类似

的内容
<configuration>
  ...
  <finalName>${build.finalName}-nodep.jar</finalName>
</configuration>

您也可以更改outputFileoutputDirectory

此外,如果您想保留原始工件名称,但使用分类器集shadedArtifactAttachedtrue

答案 1 :(得分:0)

我的问题的解决方案是relocate我正在着色的类,因此他们不会加载在其他jar中找到的副本:

http://maven.apache.org/plugins/maven-shade-plugin/examples/class-relocation.html