在java jar中具有重复的类有什么影响?

2022-09-03 12:54:05

我正在使用蚂蚁构建java jar文件。我需要使用“zipfileset src=”xxx.jar“”zipfileset src=“yyy.jar”以及xxx.jar和y.jar具有相同完全限定类名的类来包含其他jars。因此,生成的 jar 文件具有重复的类名。重复项可能产生什么影响?

谢谢。


答案 1

如果它们是重复的实现,则什么都不是 - 加载哪个并不重要。

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

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

(需要注意的是,类路径通配符使顺序非确定性。


答案 2

一般来说,这种位置是高度不推荐的,应该避免。

Java中的Jar只是类文件的容器。java使用类装入器来查看类路径并从那里装入类文件。因此,如果您有 2 个 jar A.jar 和 B.jar,它们内部具有相同的类 x.y.Foo,则将加载类路径中第一个 jar 中的类。因此,如果您的类路径是 A.jar,B.jar(按此顺序),则运行时将使用 A.jar 中的类 Foo。根据我的经验,这种不一致可能会导致非常难以修复的错误


推荐