在java jar中有重复的类有什么含义?

我正在使用ant构建java jar文件。 我需要使用“zipfileset src =”xxx.jar“”zipfileset src =“yyy.jar”包含其他jar,并且xxx.jar和yyy.jar都包含具有SAME完全限定类名的类。 因此生成的jar文件具有重复的类名。 重复有什么可能的影响?

谢谢。

如果它们是重复实现,那么什么都没有 – 加载哪个都没关系。

如果没有,您将受到类加载顺序的支配,并且可能会获得与您想要的版本不同的版本。

指定将按列出的顺序搜索类路径条目(根据此类路径doc )。 但是,如果您完全控制类路径创建(例如,与Web应用程序不同),那么这只是相关的。

(告诫类路径通配符使得顺序不确定。)

一般来说,这种情况非常不推荐,应该避免。

java中的jar只是类文件的容器。 java使用类加载器来查看类路径并从那里加载类文件。 所以如果你有2个jj和B.jar的jar里面有相同的类xyFoo,那么将加载类路径中第一个来自jar的类。 因此,如果您的类路径是A.jar,B.jar(按此顺序),将在运行时使用来自A.jar的类Foo。 这种不一致可能导致我的经验中非常难以修复的错误

什么意思重复? 很明显,你不能在同一个包中拥有2个具有相同名称的类(即使你的项目也不会编译),但如果你的意思是你在不同的包中有2个具有相同名称的类,那就是“没问题”。

我同意戴夫的观点。

你可以用命名空间分隔它们以避免他建议的陷阱吗?

我在这里没有看到的另一个答案是,如果你计划签署你的jar子,aars,apks那么signjar会抱怨你有重复的条目

jarsigner: unable to sign jar: java.util.zip.ZipException: duplicate entry: com/foo/bar/baz.java