在我的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从Person
而不是jar2
加载jar1
。
问题:如何告诉IntelliJ(告诉tomcat)加载正确的类 取决于签名?
问候。
答案 0 :(得分:1)
jars应该放在WEB-INF\lib
文件的war
文件夹中,这样,它们将由不同的类加载器加载,并且它们不会引起这样的问题。
顺便说一句,将包命名为具有相同名称的不同jar文件是不好的做法。包的主要目标之一是正确的命名空间,这是正确的。