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

问题描述 投票:0回答:5

我正在尝试通过 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,它没有这个构造函数...如何解决这个问题?

java heroku jakarta-mail
5个回答
6
投票

默认情况下,在最新 Heroku 堆栈上运行的 Java 应用程序使用 OpenJDK 8。

您的问题似乎与实际的 JVM 实现无关,而是由于 classpath 中缺少

smtp-1.5.1.jar
。为了确保正确加载 TraceInputStream,请尝试以下操作:

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

6
投票

我也面临同样的问题。这是因为我的库中没有 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>

3
投票

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


0
投票

从@Osanda Deshan 获取参考。添加以下

gradle
依赖项对我有用。

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

0
投票

使用 相同的版本号

jakarta.mail-api
jakarta.mail
可以避免此问题。

<dependency>
    <groupId>jakarta.mail</groupId>
    <artifactId>jakarta.mail-api</artifactId>
    <version>2.0.1</version>
</dependency>
<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>jakarta.mail</artifactId>
    <version>2.0.1</version>
</dependency>
© www.soinside.com 2019 - 2024. All rights reserved.