You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaFX打包可执行Jar后遇NoClassDefFoundError: jakarta/mail/internet/AddressException

JavaFX打包可执行Jar后缺失Jakarta Mail类的问题

我在JavaFX应用中集成Jakarta Mail实现邮件发送功能,IDE内测试完全正常,能成功发送邮件,但打包成可执行Jar后运行抛出NoClassDefFoundError,注释邮件相关代码后Jar可正常运行。

错误堆栈

Caused by: java.lang.NoClassDefFoundError: jakarta/mail/internet/AddressException
        at java.base/java.lang.Class.getDeclaredConstructors0(Native Method)
        at java.base/java.lang.Class.privateGetDeclaredConstructors(Class.java:3429)
        at java.base/java.lang.Class.getConstructor0(Class.java:3634)
        at java.base/java.lang.Class.getDeclaredConstructor(Class.java:2810)
        at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:939)
        at javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.java:981)
        at javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:230)
        at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:755)
        at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2845)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2641)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2555)
        at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2523)
        at com.Sapplication.Controllers.DashControllerAdmin.initPanes(DashControllerAdmin.java:114)
        at com.Sapplication.Controllers.DashControllerAdmin.initialize(DashControllerAdmin.java:77)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2662)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2555)
        at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2523)
        at com.Sapplication.StageControllers.CreateStage.createStage(CreateStage.java:23)
        at com.Sapplication.Controllers.LoginController.btnSignIn(LoginController.java:203)
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
        ... 36 more
Caused by: java.lang.ClassNotFoundException: jakarta.mail.internet.AddressException
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
        ... 56 more

邮件发送相关代码

Authenticator authenticator = new Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(USERNAME, PASSWORD);
    }
};

Session session = Session.getInstance(PROPERTIES, authenticator);
session.setDebug(debug);

try {
    // 创建带头部信息的邮件
    MimeMessage msg = new MimeMessage(session);
    msg.setFrom(new InternetAddress(from));
    InternetAddress[] address = {new InternetAddress(to)};
    msg.setRecipients(Message.RecipientType.TO, address);
    msg.setSubject(subject);
    msg.setSentDate(new Date());

    // 创建邮件正文
    Multipart mp = new MimeMultipart();
    for (String message : messages) {
        MimeBodyPart mbp = new MimeBodyPart();
        mbp.setText(message, "us-ascii");
        mp.addBodyPart(mbp);
    }
    msg.setContent(mp);

    // 发送邮件
    Transport.send(msg);
    JOptionPane.showMessageDialog(null,"Email Sent Successfully!");
} catch (AddressException e) {
    throw new RuntimeException(e);
} catch (MessagingException e) {
    throw new RuntimeException(e);
}

已尝试的解决方案

  • 在POM中添加Jakarta Mail和Jakarta Activation依赖:
<dependency>
    <groupId>com.sun.activation</groupId>
    <artifactId>jakarta.activation</artifactId>
    <version>2.0.1</version>
</dependency>
<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>jakarta.mail</artifactId>
    <version>2.0.1</version>
</dependency>
  • 确认项目结构的Libraries和Modules中已包含上述两个依赖,也尝试过删除Maven依赖直接添加本地Jar,均无效
  • 在VM选项中添加以下配置:
--module-path
"C:\Program Files\Java\javafx-sdk-19.0.2.1\lib"
--add-modules
javafx.controls,javafx.fxml,jakarta.activation,jakarta.mail
--add-exports
javafx.base/com.sun.javafx.event=ALL-UNNAMED

环境信息

  • IDE:IntelliJ
  • SDK:OpenJDK 19.0.2
  • 打包方式:通过IntelliJ的Build -> Build Artifacts生成out文件夹中的可执行Jar,后续使用jdeploy管理更新

运行Jar的CMD命令

java -jar "C:\Users\Main PC\Desktop\SApplication.jar"

内容的提问来源于stack exchange,提问作者Hiimisabella

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 18:27:02