如何在类路径中检测重复的JAR?

时间:2009-05-18 14:21:48

标签: java jar classpath

有没有人有代码来检测类路径中的重复JAR?

背景:当类路径中有两个版本的同一个JAR时,可能会发生奇怪的事情。使用Maven等工具时甚至会发生这种情况:更改依赖关系并构建WAR而不先清理。由于未清除target/webapp/WEB-INF/lib,因此依赖关系将在那里两次。

这有安全网吗?

5 个答案:

答案 0 :(得分:23)

JBoss Tattletale可能对此有所帮助。

这是一个免费的工具,可以扫描项目使用的JAR文件,并为您提供有关它们的报告。

其功能包括:

  • 如果一个类位于多个JAR文件中,则发现
  • 如果相同的JAR文件位于多个位置,则发现
  • 查找具有不同版本号的类似JAR文件

答案 1 :(得分:5)

有一个Maven插件可以做到这一点:maven-duplicate-finder-plugin

[编辑] 如果你想自己在单元测试中这样做,请使用

getClass().getClassLoader().getResources( "com/pany/package/Java.class" )

如果返回多个URL,则类路径上有重复项。

缺点是这仅适用于您过去曾发生过冲突的情况。从积极的方面来说,它只是几行代码(或者在编写帮助器方法时为一行),它可以在构建服务器上运行。

答案 2 :(得分:2)

System.getProperty("java.class.path"),拆分,分类,用肉眼观察它 :-)。

它不会包含从其他jar中的清单派生的类路径: - (。

或者使用http://www.jboss.org/tattletale作为建议的海报之一。

答案 3 :(得分:1)

我认为最简单的方法是先删除目标目录。希望复制所有.jar文件并不会非常耗时。

否则你将不得不以某种方式比较大小的文件(无论是直接,通过计算校验和还是类似)。这根本听起来不太好。

答案 4 :(得分:-2)

您可以编写一个简单的脚本来比较每个jar文件的md5总和与其他每个jar文件的比较,并在此过程中删除重复项。