如果我有两个同名的类在我的类路径中的两个不同的jar中说Matcher.java,哪一个将由JVM拾取,那么我是否可以建议JVM选择一个特定的?
答案 0 :(得分:15)
引用Oracle:
规格订单
指定多个类路径条目的顺序是 重要。 Java解释器将在中查找类 目录按它们出现在类路径变量中的顺序。在 在上面的例子中,Java解释器将首先寻找所需的 目录C:\ java \ MyClasses中的类。只有它找不到 解释器看起来在该目录中具有正确名称的类 在C:\ java \ OtherClasses目录中。
提到的例子:
C:> java -classpath C:\ java \ MyClasses; C:\ java \ OtherClasses ...
所以是的,它会加载出现在首先指定的类路径中的那个。
答案 1 :(得分:2)
第一个在类路径中找到的。即,将使用包含您的类的第一个jar。
您无法在JVM中控制它,但可以控制类路径 - 确保在类路径中首先列出/找到您想要的那个。
答案 2 :(得分:1)
有一种方法可以指定从中挑选类的位置..您可以创建自己的类加载器,根据您的要求加载类。
您可以使用以两种方式加载的课程
java -Djava.system.class.loader
=com.somepackage.YourCustomClassLoader com.somepackage.YourMainClass
)这里有一些关于类加载的有用链接
答案 3 :(得分:0)
使用时使用类的完全限定路径。但是如果你的意思是同名的类也有相同的包 - 修复class-path。