如何避免Java中的“重复类”

时间:2011-06-21 16:50:01

标签: java

假设我有一个java项目myProject并且正在使用外部库jar(someJar.jar),它有一个类com.somepackage.Class1.class

现在我找到Class1.java的更新版本,它修复了原始jar中的错误。

我在源Class1.java

下的源代码中添加了新的com.somepackage

当我构建项目时(例如,使用Netbeans),有一个dist\myProject.jar包含类com.somepackage.Class1.class和一个dist\lib\someJar.jar,它还包含一个具有相同名称的类。 / p>

当我运行文件时(例如,使用java -jar dist\myProject.jar),使用新版本的Class1.class(我想要)。

  1. 如果出现这样的重复,Java如何决定运行哪个类文件?有什么办法可以指定优先顺序吗?

  2. 有没有'正确'的方法来避免这种冲突?

  3. 在Proguard中,当我尝试压缩代码时,出现duplicate class错误。我如何消除这种情况?

3 个答案:

答案 0 :(得分:6)

您是否可以创建包含错误修复的更新jar文件?如果您没有相同的完全限定类的两个版本,那么这将使事情变得更加简单。

答案 1 :(得分:4)

  1. Java根据类路径的顺序决定使用哪一个。先列出你的,你会没事的。

  2. “正确”的方法是修复原始来源,但有时并不总是一种选择。

  3. 我没有使用过ProGuard,但是在重复上课之前我已经重新打了一个库。我的解决方案是告诉Ant忽略重复的类。我认为ProGuard也会得到这种支持。

答案 2 :(得分:1)

1)更新Jar是一个更好的解决方案。

2)使用不同的班级名称。有没有理由,为什么要使用相同的类名和相同的包装?我认为没有理由。

3)创建一个包装器/代理类,它封装了对jar的所有调用,你可以决定调用这个修复bug的新类(前提是它有不同的名称和包装)