Intellij / Tomcat:NoSuchMethodError

时间:2016-04-01 12:44:27

标签: java tomcat intellij-idea

在我的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)加载正确的类 取决于签名?

问候。

1 个答案:

答案 0 :(得分:1)

jars应该放在WEB-INF\lib文件的war文件夹中,这样,它们将由不同的类加载器加载,并且它们不会引起这样的问题。

顺便说一句,将包命名为具有相同名称的不同jar文件是不好的做法。包的主要目标之一是正确的命名空间,这是正确的。