log4j2 java.lang.NoClassDefFoundError:org/apache/logging/log4j/LogManager

新手上路,请多包涵

我在我的 java 应用程序中使用 log4j 2.3。我通过 maven 添加了依赖项。

在 eclipse 中运行程序时一切正常,但是当我用 maven 打包并尝试运行 jar 时,出现以下错误:

 Exception in thread "main" java.lang.NoClassDefFoundError: org/apache logging/log4j/LogManager
    at main.myclass.<clinit>(myclass.java:11)
Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.LogManager

    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 1 more

为什么在从 jar 运行时找不到类?

添加 log4j 1.2 也没有用。该程序在 eclipse 中运行良好,因此不应缺少依赖项。

原文由 Pabi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

当您从命令行运行应用程序 jar 时,您的依赖 jar 在运行时不可用。您需要将这两个插件中的任何一个包含到 pom.xml 中,以便您的依赖项在运行时可用。

使用:maven-shade-plugin

 <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>2.4.1</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <transformers>
                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                  <mainClass>org.sonatype.haven.HavenCli</mainClass>
                </transformer>
              </transformers>
            </configuration>
          </execution>
        </executions>
      </plugin>

使用:maven依赖插件

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.8</version>
    <executions>
        <execution>
             <id>copy-dependencies</id>
             <phase>package</phase>
             <goals>
                 <goal>copy-dependencies</goal>
             </goals>
             <configuration>
                 <outputDirectory>${project.build.directory}/lib</outputDirectory>
             </configuration>
        </execution>
     </executions>
</plugin>

当您执行 mvn package 时,它将生成 uber jar / 或将依赖项复制到 outputDirectory。我更喜欢 maven-shade-plugin 来生成一个 jar 来处理所有依赖项。

原文由 Garry 发布,翻译遵循 CC BY-SA 3.0 许可协议

请将 jar 文件添加到库中的类路径,它对我有用

原文由 Satish Chodisetti 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题