Maven打包可执行Jar出现NoClassDefFoundError: javax/mail/MessagingException
Maven打包Java邮件项目问题排查与解决
问题现象
基于Maven构建的Java邮件发送项目(使用Eclipse开发),在Eclipse内运行完全正常,但打包成可执行Jar后执行java -jar myjar.jar时出现以下错误:
Error: Unable to initialize main class com.my.package.MyClass Caused by: java.lang.NoClassDefFoundError: javax/mail/MessagingException
现有配置
依赖配置
<dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> <version>1.6.2</version> </dependency>
插件配置
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.0.2</version> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <mainClass>com.mypackage.MyClass</mainClass> </manifest> </archive> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.1.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>com.mypackage.MyClass</mainClass> <manifestEntries> <Multi-Release>true</Multi-Release> </manifestEntries> </transformer> <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/> </transformers> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> </excludes> </filter> </filters> </configuration> </execution> </executions> </plugin>
排查过程
- 已确认Maven依赖列表中存在
javax.mail-1.6.2.jar,但仍出现类找不到的错误 - 尝试过调整
maven-shade-plugin和maven-jar-plugin的多种配置,无法解决问题 - 改用
maven-assembly-plugin并配置主类后,出现no main manifest attribute, in myjar.jar错误 - 重新添加
maven-jar-plugin并配置主类,又回到最初的NoClassDefFoundError错误 - 解压Jar包查看Manifest文件,发现缺少
Main-Class配置项,Manifest内容如下:
Manifest-Version: 1.0 Created-By: Apache Maven 3.8.4 Built-By: myUserName Build-Jdk: 15
解决方法
在Eclipse中执行两次Maven构建命令:
- 先执行:
clean package - 再执行:
clean compile assembly:single
内容的提问来源于stack exchange,提问作者jasonwardenburg
相关产品推荐
相关产品推荐

