27

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

背景:当类路径中有同一个 JAR 的两个版本时,可能会发生非常奇怪的事情。这甚至在使用 Maven 之类的工具时也会发生:更改依赖项并构建 WAR 而无需先清理。由于target/webapp/WEB-INF/lib没有清理,依赖项将在那里两次。

这有安全网吗?

4

5 回答 5

27

JBoss Tattletale可能会帮助您。

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

它的特点包括:

  • 发现一个类是否位于多个 JAR 文件中
  • 发现同一个 JAR 文件是否位于多个位置
  • 查找具有不同版本号的类似 JAR 文件
于 2009-05-18T14:28:57.887 回答
6

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

[编辑]如果您想自己在单元测试中进行,请使用

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

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

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

于 2012-05-02T09:10:08.620 回答
2

System.getProperty("java.class.path"),拆分,排序,用肉眼看:-)。

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

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

于 2009-05-18T14:29:14.640 回答
1

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

否则,您将不得不以某种方式比较相当大的文件(无论是直接的,通过计算的校验和或类似的)。这听起来一点都不好。

于 2009-05-18T14:23:26.463 回答
-2

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

于 2009-05-18T14:26:23.617 回答