【问题标题】:Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger in generated jar file线程“主”java.lang.NoClassDefFoundError 中的异常:生成的 jar 文件中的 org/apache/log4j/Logger
【发布时间】:2018-11-08 06:16:11
【问题描述】:

我在 IntelliJ IDEA 中使用Maven 生成了一个jar 文件。尝试执行时收到以下错误消息:

线程“主”java.lang.NoClassDefFoundError 中的异常: org/apache/log4j/Logger

我只使用了一个log4j 版本,1.2.17 和 java 版本 1.8.0_171。我也在 pom.xml 中设置了跳过测试:<maven.test.skip>true</maven.test.skip> 直接从IDE执行成功。我使用 Maven Surefire 插件:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
            <skipTests>true</skipTests>
        </configuration>
    </plugin>

【问题讨论】:

  • 你在执行你的 jar 时,是否在类路径中添加了依赖关系的 jar?
  • 您是否尝试从命令行执行您的 Java 程序?你能添加你调用的命令吗?
  • @Daniele : 当我尝试使用 java -jar &lt;myjar&gt; 执行时出现以下错误:没有主清单属性
  • 您可以使用以下@streetturtle 的建议来解决“无主清单属性”问题。 (清单将被添加到mvn package生成的jar中)。

标签: java maven intellij-idea jar


【解决方案1】:

当你从IDEA包含的IDEA依赖中运行它时,你可以在IDEA的Run工具窗口中查看该命令。 但是当您生成一个 jar 并运行它时,其中不包含任何依赖项。要使其工作,您必须告诉 Maven 包含它们,其中一种方法是通过在 pom.xml 中添加 build 部分来使用 Apache Maven Assembly Plugin

<build>
  <plugins>
    <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <configuration>
        <archive>
          <manifest>
            <mainClass>package.MainClass</mainClass>
          </manifest>
        </archive>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
      </configuration>
    </plugin>
  </plugins>
</build>

【讨论】:

  • 我添加了它,但它生成了一个 30 KB 的 jar 并得到了同样的错误。
猜你喜欢
  • 2018-02-13
  • 1970-01-01
  • 2019-10-17
  • 1970-01-01
  • 1970-01-01
  • 2011-02-10
  • 2017-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多