在我的 Java 项目中,我有一个类 Person
,它存在于两个具有相同包名 (com.example.beans
) 的不同 jar 中。
问题是这个类在jar1
中是这样定义的:
class Person {
private String firstname;
private String lastname;
public Person(String firstname, String lastname){
this.firstname = firstname;
this.lastname = lastname;
}
}
在 jar2
中:
class Person {
private int age;
public Person(int age){
this.age = age;
}
}
这个类在项目中使用正确,IntelliJ 没有提示。 在服务器 (tomcat 8) 启动时,出现以下错误:
java.lang.NoSuchMethodError: com.example.beans.Person(Ljava/lang/String, Ljava/lang/String)
我怀疑 Tomcat 从 jar2
而不是 jar1
加载了 Person
。
问题:如何告诉 IntelliJ(告诉 tomcat)加载正确的类 取决于签名?
问候。
最佳答案
jar 应该放在 war
文件的 WEB-INF\lib
文件夹中,这样,它们将被不同的类加载器加载,并且它们不会'不会引起这样的问题。
顺便说一下,在不同的 jar 文件中使用相同的名称来命名包是不好的做法。包的主要目标之一是正确的命名空间,而这绝不是正确的。
关于java - 智能/Tomcat : NoSuchMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36356700/