【问题标题】:maven project java -jar : NoClassDefFoundError: javax/mail/MessagingExceptionmaven 项目 java -jar : NoClassDefFoundError: javax/mail/MessagingException
【发布时间】: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 确保添加 &lt;mainClass&gt;com.etcetera.MyClass&lt;/mainClass&gt; 标签。通过这些变化,我得到了no main manifest attribute, in myjar.jar。然后我添加了 maven-jar-plugin 插件,还添加了主类,现在我又回到了原来的错误。

【问题讨论】:

  • 你是如何构建 jar 文件的? mvn clean package?如果您解压 jar 文件,MessagingException 文件会在那里吗?
  • 正在做clean install但改为clean package;两种方式的结果相同

标签: java maven jakarta-mail


【解决方案1】:

在构建 Web 应用程序时,依赖项当然会捆绑在 .WAR/.EAR 中。

但是,默认情况下,Maven 会不是在 .jar 文件中捆绑依赖项。 (换句话说,罐子不会放在其他罐子里)。

不过,您可以使用 jar-with-dependencies 描述符。可以在以下问题中找到更多详细信息:

Including dependencies in a jar with Maven

How can I create an executable/runnable JAR with dependencies using Maven?

【讨论】:

  • 请参阅上面的更新。我尝试了这两种方法,但出现“无主要清单属性”错误。
  • 您将需要添加一个META-INF/MANIFEST.MF 文件:stackoverflow.com/q/9689793/2657515
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多