NoSuchMethodError: com.sun.mail.util.TraceInputStream Tomcat9 jdk1.8.0_281

NoSuchMethodError: com.sun.mail.util.TraceInputStream Tomcat9 jdk1.8.0_281

我需要一点帮助来理解一个错误,我希望有经验的开发人员可以很容易地解决这个错误:)

我开发了一个 Java EE 应用程序,我刚刚重新安装了我的服务器 (ubuntu),现在我的应用程序无法发送电子邮件。

我仍然可以从我的本地环境发送电子邮件(Eclipse、Tomcat9、jdk1.8.0_281)。 但是从我的服务器我得到以下错误:

java.lang.NoSuchMethodError: com.sun.mail.util.TraceInputStream.<init>(Ljava/io/InputStream;Lcom/sun/mail/util/MailLogger;)V
                at com.sun.mail.smtp.SMTPTransport.initStreams(SMTPTransport.java:2016)
                at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1936)
                at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:654)

我无法理解,因为我的服务器也 运行 tomcat9 并且我专门安装了 jdk1.8.0_281。 (我安装了 jdk 并在 /etc/default/tomcat9 中设置了 JAVA_HOME=/usr/lib/jvm/jdk1.8.0_281)

我从 Eclipse 导出我的项目,它应该有所有的库,我看不出这两个环境有什么不同。

您有什么建议或解决方案吗? 谢谢,祝您新年快乐!

阿德里安

根据马特的建议进行编辑 所以我在我的本地开发环境和我的服务器上添加了 -verbose:class 到 java 参数,并为我们的目的寻找有趣的 classes。如您所料,这两个环境之间存在差距,此处:

On Local PC:
    [Loaded com.sun.mail.util.TraceInputStream from file:/D:/EclipseWorkspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps/MyApp/WEB-INF/lib/javax.mail.jar]
     
On Ubuntu Server    
    [2022-01-03 20:21:28] [info] [Loaded com.sun.mail.util.TraceInputStream from file:/var/lib/tomcat9/webapps/MyApp%23%232.02/WEB-INF/lib/mailapi.jar]

在不知道您的依赖项的情况下,很难说出问题所在,但您的 Java 版本与此问题无关。

很可能您的应用程序的编译和部署版本使用的 JavaMail 或其他依赖项与您在本地使用的版本不同,而此部署版本没有该方法。

添加 Java 选项 -verbose:class,它会告诉您 类 正在加载什么,然后 grep TraceInputStreamSMTPTransport。在您的服务器和本地执行相同的操作并比较版本。