java.lang.NoSuchMethodError:com.sun.mail.util.TraceInputStream

gt0wga4j  于 2022-12-17  发布在  Java
关注(0)|答案(4)|浏览(182)

我尝试通过Java Mail API发送电子邮件,它在我的笔记本电脑上运行良好。当我在Heroku中做同样的事情时,我得到了这个:

java.lang.NoSuchMethodError: com.sun.mail.util.TraceInputStream.(Ljava/io/InputStream;Lcom/sun/mail/util/MailLogger;)V
    at com.sun.mail.smtp.SMTPTransport.initStreams(SMTPTransport.java:2014)
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1936)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:654)
    at javax.mail.Service.connect(Service.java:291)
    at ...

下面是我在pom.xml中的内容:

<dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mailapi</artifactId>
        <version>1.4.3</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.sun.mail</groupId>
        <artifactId>javax.mail</artifactId>
        <version>1.5.3</version>
        <scope>runtime</scope>
    </dependency>

我猜Heroku JDK中有另一个版本的Java Mail API,它没有这个构造函数......如何修复这个问题?

dphi5xsq

dphi5xsq1#

默认情况下,在最新Heroku堆栈上运行的Java应用程序使用OpenJDK 8。
您的问题似乎与实际的JVM实现无关,而是由于类路径中缺少smtp-1.5.1.jar。要确保正确加载TraceInputStream,请尝试以下操作:

java.net.URL classUrl = this.getClass().getResource("com.sun.mail.util.TraceInputStream");
out.println(classUrl.getFile());
pinkon5k

pinkon5k2#

我也遇到过同样的问题,因为我的库中没有TraceInputStream类,我只是把库降级到1.4.4,它就工作了。

<dependency>
        <groupId>com.sun.mail</groupId>
        <artifactId>smtp</artifactId>
        <version>1.4.4</version>
    </dependency>
    <dependency>
        <groupId>com.sun.mail</groupId>
        <artifactId>mailapi</artifactId>
        <version>1.4.4</version>
    </dependency>
mspsb9vt

mspsb9vt3#

您混合了不同版本的API和实现;请不要这样做。就此而言,您只需要com.sun.mail:javax.mail依赖项。如果Heroku在运行时环境中没有提供它,则需要将其打包到应用程序中。确保JavaMail jar文件最终位于应用程序的WEB-INF/lib目录中。

dauxcl2d

dauxcl2d4#

正在从@Osanda Deshan获取引用。添加以下gradle依赖项对我很有效。

implementation 'javax.mail:javax.mail-api:1.4.4'
    implementation 'javax.mail:mail:1.4.4'

相关问题