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

yeg*_*256 6 java jakarta-mail heroku

我正在尝试通过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 ...
Run Code Online (Sandbox Code Playgroud)

这是我所拥有的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>
Run Code Online (Sandbox Code Playgroud)

我想在Heroku JDK中还有另一个版本的Java Mail API,它没有这个构造函数......如何解决这个问题?

Osa*_*han 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>
Run Code Online (Sandbox Code Playgroud)


ale*_*oot 5

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

您的问题似乎与实际的JVM实现无关,而是由于smtp-1.5.1.jarclasspath中的缺失。为了确保正确加载TraceInputStream,请尝试以下操作:

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