0

我有几个包含完全相同的类的罐子。

例如,A.jar 和 B.jar 具有相同的类 Hello.class。如果我运行以下命令会发生什么:

java -classpath A.jar;B.jar com.testing.testcode

我的问题是它是否会运行?据我了解,类加载器将扫描类路径,并将返回它首先找到的任何 Hello.class。

我知道如果我使用 OSGi 加载特定的类,我可以避免这个问题。

但我的问题是——这是否会运行?或者 java -classpath A.jar;B.jar com.testing.testcode 会因为拥有同一个类的两个版本而崩溃。

4

3 回答 3

3

这将起作用,并且将使用类路径中的第一个 Hello 类,因此在这种情况下,来自 A.jar 的类

于 2013-10-16T16:54:44.670 回答
0

类路径是“路径”。进行第一场比赛。

首先检查一个引导类路径,其中包括 JRE 中的 JAR。顺便说一句,您可以预先添加这些并覆盖系统类,但您不应该这样做,并且您的许可协议中可能不允许这样做。

于 2013-10-16T17:02:50.633 回答
0

每当您在类路径中包含 jar 时,在启动/应用程序类上都会被加载到容器中。

现在,您的代码是否有效将取决于首先在您的容器中加载哪个 jar,因此,如果您幸运,那么在您当前的设置中它将有效,否则您可能会收到一些错误提示method1 doesn't accept Type1 it should accept Type2

于 2013-10-16T17:10:47.177 回答