【问题标题】:Error when exporting a project with Log4j2 into a JAR将带有 Log4j2 的项目导出到 JAR 时出错
【发布时间】:2014-08-15 00:07:42
【问题描述】:

我正在为我的项目创建一个使用 Log4j2 的 JAR 文件。我已将 Log4j2 jar(用于 CORE 和 API)保存在“src”文件夹下的“lib”文件夹中。在 Eclipse 中,我导出了我的项目以创建 JAR 文件,并检查了 JAR 文件中是否包含/存在“lib”文件夹。

当我在 Eclipse 中运行项目时,它运行得非常好,但是当我尝试通过 cmd 提示符执行 jar 时,我收到以下错误:

C:\Users\workspace>java -jar ConnectorClient.jar
    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/logging/log4j/LogManager
            at com.client.ConnectionClient.<clinit>(ConnectionClient.java:20)
    Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.LogManager
            at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
            at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
            at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
            ... 1 more

我的代码中导致错误的行(第 20 行)是:

private static Logger logger = LogManager.getLogger(ConnectionClient.class);

似乎没有读取 Log4j2 jar。有人可以在这里帮助我吗?如图所示,我已经在项目的 Java 构建路径中添加了 2 个 jar。

我的类路径文件(位于项目文件夹中)包括问题中的 2 个 jar,如下所示:

    <?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.8.0_05"/>
    <classpathentry kind="lib" path="lib/log4j-api-2.0-rc1.jar"/>
    <classpathentry kind="lib" path="lib/log4j-core-2.0-rc1.jar"/>
    <classpathentry kind="output" path="bin"/>
</classpath>

有什么帮助吗?

谢谢

【问题讨论】:

  • 尝试使用 projectroot 添加 jar 右键单击​​配置构建路径然后添加外部 jars

标签: java eclipse jar log4j2


【解决方案1】:

也许您想导出一个可运行的 Jar 文件

并包含所需的库:

【讨论】:

  • 这种方式对我有用,但我仍然不确定为什么它不适用于我在 Eclipse 中的 ClassPath 上指定这些 jar 的位置。我在原始问题中添加了我的类路径文件.有什么建议吗??
【解决方案2】:

有一个常见的误解,即一个 jar 可以打包到另一个 jar 中。它只是对类加载器不可用,因此您最终会遇到类加载异常。

因此,您可以将依赖项 jar 提取到您自己的 jar 中,如 @PaulVargas 使用 eclipse 所描述的那样,或者您执行 90% 的人所做的事情并将您的依赖项添加到您的 jar 执行的类路径中:

java -classpath libs/*.jar -jar MyJar.jar

这意味着将所有依赖项放在一个单独的文件夹中(这里是 libs),而不是打包在你的 jar 中。

【讨论】:

  • 嗨,为了检查它是否真的是导致这个问题的类路径问题,我将 2 个 jars 添加到项目的类路径中:右键单击项目 -> 构建路径 -> 配置构建Path -> Libraries tab -> Add external Jars -> 然后选择 2 jar。它没有用.. 然后我将这些 jar 添加到 lib 文件夹中,并将这个“lib”文件夹添加到“路径”环境变量中。即使那也没用..你能告诉我我在这里做错了什么吗??
猜你喜欢
  • 2014-01-12
  • 1970-01-01
  • 1970-01-01
  • 2018-11-18
  • 2013-04-14
  • 1970-01-01
  • 2014-11-15
  • 1970-01-01
  • 2012-03-25
相关资源
最近更新 更多