如何避免Java中的"重复类"

Jus*_*s12 10 java

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

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

Class1.java在包的源代码中包含了newcom.somepackage

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

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

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

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

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

Jon*_*eet 6

你能不能创建一个包含bug修复的更新的jar文件?如果您没有相同的完全限定类的两个版本,那么这将使事情变得更加简单.


Rev*_*nzo 6

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

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

  3. 我没有使用过 ProGuard,但我已经重新 jarred 库,因为它有重复的类。我的解决方案是告诉 Ant 忽略重复的类。我认为 ProGuard 也会有这种支持。