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