java - 智能/Tomcat : NoSuchMethodError

标签 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 从 jar2 而不是 jar1 加载了 Person

问题:如何告诉 IntelliJ(告诉 tomcat)加载正确的类 取决于签名?

问候。

最佳答案

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

顺便说一下,在不同的 jar 文件中使用相同的名称来命名包是不好的做法。包的主要目标之一是正确的命名空间,而这绝不是正确的。

关于java - 智能/Tomcat : NoSuchMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36356700/

相关文章:

java - 什么是消息传递?

java - 什么是NullPointerException,我该如何解决?

java - 错误: Could not find or load main class IntelliJIdea

java - Tomcat 找不到 Spring Controller

java - 从基本链接获取 URL 层次结构

java - 在方法中使用单独的技术与在方法中使用其他方法

tomcat - 在 tomcat 的 catalina.sh 中设置 -server

tomcat - rundeck 的 Artifactory 插件?

java - 如何设置特定于 Tomcat 应用程序的属性?

java - 整数可以是原始的,但assertTrue 变得不明确 - 如何满足这两个要求?