如何在类路径中检测重复的JAR?
有没有人有代码来检测类路径中的重复JAR?
背景:当类路径中有相同JAR的两个版本时,可能会发生奇怪的事情。 使用Maven等工具时甚至会发生这种情况:更改依赖关系并构建WAR而不先清理。 由于未清除target/webapp/WEB-INF/lib
,因此依赖关系将在那里两次。
这有安全网吗?
JBoss Tattletale可能会帮助您解决这个问题。
它是一个免费工具,可扫描项目使用的JAR文件,并为您提供有关它们的报告。
其特色包括:
- 如果一个类位于多个JAR文件中,请发现
- 如果相同的JAR文件位于多个位置,请发现
- 查找具有不同版本号的类似JAR文件
有一个Maven插件可以做到这一点: maven-duplicate-finder-plugin
[编辑]如果您想自己进行unit testing,请使用
getClass().getClassLoader().getResources( "com/pany/package/Java.class" )
如果返回多个URL
,则类路径上有重复项。
缺点是这只适用于过去发生过冲突的情况。 从积极的方面来说,它只是几行代码(或者在编写帮助器方法时为一行)并且它可以在构建服务器上运行。
System.getProperty("java.class.path")
,拆分,排序,用肉眼看看:-)。
它不包括从其他jar子里的清单派生的类路径:-(。
或者使用http://www.jboss.org/tattletale作为建议的海报之一。
我认为最简单的方法是先删除目标目录。 希望复制所有.jar文件并不会非常耗时。
否则你将不得不以某种方式比较大型文件(无论是直接,通过计算校验和还是类似)。 这根本听起来不太好听。
您可以编写一个简单的脚本来比较每个jar文件的md5总和与其他jar文件的比较,并在此过程中删除重复项。