java - 线程 "main"java.lang.NoClassDefFoundError : org/apache/log4j/Logger in generated jar file 中出现异常

标签 java maven intellij-idea jar

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

Exception in thread "main" 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>

最佳答案

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

<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>

关于java - 线程 "main"java.lang.NoClassDefFoundError : org/apache/log4j/Logger in generated jar file 中出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50586934/

相关文章:

java - Entry 和 LinkedLists,遍历它们的最佳方式?

java - Guava @VisibleForTesting : Help me with a complete example

java - 如何将 Maven 配置为忽略本地安装并强制使用 JDK 版本

android - 在 Intellij Genymotion 插件上运行 Android 应用程序时失败 [INSTALL_FAILED_DEXOPT]

scala - 为什么在Scala中定义方法时添加了 ": Unit = "?

java - Spark 中的关系转换

java - 关于用 Java 编写自定义类异常

java - 如何不向 arrayList 添加重复项

java - Maven "class file for ... not found"编译错误

maven - 如何为 Maven Artifact 创建本地中央存储库