使用maven-shade-plugin时出现多余的警告

15
我正在使用maven-shade-plugin对一个简单的maven项目进行处理,该插件成功地将所有依赖项包含到最终的 "shaded" jar 中。这个过程每次都很好地运行并产生了我需要的结果。
当第一次运行(在clean之后)时,该插件静默无声,并且几乎没有任何输出。然而,当重新运行(不清除上次构建的clean),就会出现许多警告信息,例如:
[WARNING] We have a duplicate package/a/b/foo.class
[WARNING] We have a duplicate package/c/d/bar.class

这只是警告信息,最终的构件运行良好。

我的问题很简单:我如何安全地解决或抑制这些警告信息,而不必先运行 clean


注意:一个可能的解决方案是转到 maven-assembly-plugin,但我宁愿不这样做,因为 maven-shade-plugin 的配置非常好和简单。


1
我假设报告的重复项都是依赖类,对吗?在这种情况下,它们很可能首先被提取到某个文件夹中,因此您可能需要在打包阶段之前或之后添加一个针对这些文件夹的清理步骤(具体取决于您是否需要在构建之间使用这些类)。 - Thomas
1
我和上面的问题一样...如何抑制警告。在我的情况下,我包含了许多Spring包jar的依赖项,这些依赖项我无法控制 - 也就是说,我不能在之前进行“清理”。 - Mark Laff
2
这正是我的问题!哦,亲爱的! - plasma147
你使用的 maven-shade-plugin 版本是哪个?看起来在版本 < 1.2 中存在类似的 bug... http://maven.40175.n5.nabble.com/jira-Created-MSHADE-30-duplicate-entry-error-td263554.html - rogerdpack
1个回答

17
这是因为它正在将文件渲染到已经被渲染过的jar包中。
第一次在清理之后运行“package”命令,它会创建一个jar包。 第二次运行时,它不会再生成jar包,因为它已经存在了。
从这个shade插件的角度来看,它并不知道这已经被渲染过了,所以它会尝试再次添加类。
我们可以通过配置jar插件来强制maven每次都创建jar包。
<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-jar-plugin</artifactId>
   <version>2.4</version>
   <configuration>
     <forceCreation>true</forceCreation>
   </configuration>
</plugin>

这个方法对我有效。或者您可以进行一次干净的安装。


1
谢谢。有没有其他方法可以让插件使用“original”jar包?我不理解“maven-jar-plugin”和“maven-shade-plugin”之间的动态关系。 - Dmitry Minkovsky
我想补充一点,如果您还使用Maven Shade创建了阴影源JAR,则需要为相应的模块在Maven Source插件中添加相同的<forceCreation>true</forceCreation>选项。 - kriegaex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接