假设我有一个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
(我想要)。
如果出现这样的重复,Java如何决定运行哪个类文件?有什么办法可以指定优先顺序吗?
有没有'正确'的方法来避免这种冲突?
在Proguard中,当我尝试压缩代码时,出现duplicate class
错误。我如何消除这种情况?
答案 0 :(得分:6)
您是否可以创建包含错误修复的更新jar文件?如果您没有相同的完全限定类的两个版本,那么这将使事情变得更加简单。
答案 1 :(得分:4)
Java根据类路径的顺序决定使用哪一个。先列出你的,你会没事的。
“正确”的方法是修复原始来源,但有时并不总是一种选择。
我没有使用过ProGuard,但是在重复上课之前我已经重新打了一个库。我的解决方案是告诉Ant忽略重复的类。我认为ProGuard也会得到这种支持。
答案 2 :(得分:1)
1)更新Jar是一个更好的解决方案。
2)使用不同的班级名称。有没有理由,为什么要使用相同的类名和相同的包装?我认为没有理由。
3)创建一个包装器/代理类,它封装了对jar的所有调用,你可以决定调用这个修复bug的新类(前提是它有不同的名称和包装)