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

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

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

我在源代码com.somepackage下包含了新的Class1.java

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

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

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

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

  3. 在Proguard中,当我尝试压缩我的代码时,我得到了一个duplicate class错误。 我该如何消除这个?

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

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

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

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

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

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

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