【发布时间】:2023-01-13 02:21:32
【问题描述】:
我有一个 java 项目,它发送用 maven 构建的电子邮件(使用 Eclipse)并且它在 Eclipse 中工作没有问题,但是当试图打包一个可运行的 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,所以不确定为什么我无法运行该 jar ...是否有我错过的配置选项?
谢谢!
我四处搜索并尝试了 shade 和 jar 插件的多种变体,我希望能够使用 java -jar myjar.jar 从命令行运行 jar。我在搜索中找到的大多数帖子都建议将邮件 jar 添加到类路径中,但这看起来已经完成了,因为 jar 在 maven 依赖项列表中。
更新
根据以下建议尝试了多种变体。尝试使用 maven-assembly-plugin 确保添加 <mainClass>com.etcetera.MyClass</mainClass> 标签。通过这些变化,我得到了no main manifest attribute, in myjar.jar。然后我添加了 maven-jar-plugin 插件,还添加了主类,现在我又回到了原来的错误。
【问题讨论】:
-
你是如何构建 jar 文件的?
mvn clean package?如果您解压 jar 文件,MessagingException 文件会在那里吗? -
正在做
clean install但改为clean package;两种方式的结果相同
标签: java maven jakarta-mail