当前位置: 首页 > 知识库问答 >
问题:

将带有Log4j2的项目导出到JAR时出错

宗政永望
2023-03-14

我正在为我的项目创建一个使用Log4j2的JAR文件。我已将Log4j2 jar(用于核心和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罐子没有被读取。有人能在这里帮我吗?我已经在项目的Java构建路径中添加了2个罐子,如图所示...

我的类路径文件(位于项目文件夹中)包括问题中的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>

有什么帮助吗?

谢啦

共有2个答案

东方明亮
2023-03-14

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

因此,您要么将依赖项jar提取到您自己的jar中,如@PaulVargas使用eclipse所述,要么像90%的人所做的那样将您的依赖项添加到jar执行的类路径中:

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

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

梁丘佑运
2023-03-14

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

并包括所需的库:

 类似资料:
  • 我确实检查了已经回答过的问题,这些问题的主题几乎与这个问题相同,但没有一个回答过的问题能够解决我的问题。 我已经在线搜索了大约4个小时,尝试了很多不同的方法来解决我的问题。。 我想在Java做一个乒乓游戏,现在我想导出我的项目,这样我就可以把它发给一些朋友,这样他就可以试试了。 我在这个项目中使用LWJGL,所以我确实在参考库和LWJGL中添加了一些JAR。jar添加了windows本机,它包含在

  • 有没有什么我应该提前补充的谢谢:)

  • 我正在尝试导出一个包含som映像的java项目,但导出后映像并不显示。我看过这些类似的问题和答案: Eclipse导出的Runnable JAR不显示图像 在Eclipse(Java)中用JAR导出图像 当我从Eclipse运行程序时,图像会显示出来,但当我导出它时,它们就消失了。我做错了什么?我真的觉得我什么都试过了,但也许我遗漏了一些简单的细节? 谢谢!

  • 所以,我已经在互联网上阅读了如何将我的项目提取到一个可运行的Jar文件。 我可以很好地提取它们,但当我尝试运行它时,它什么也不做。 当我在命令提示符下用 它所指向的特定行是: 它正在产生一个空指针异常。当我在eclipse中运行我的项目时,它就很好了。 当我将它导出到一个jar时,它得到一个NPE,我相信这是由于它找不到文件造成的。 以下是我的项目工作区: http://imgur.com/034

  • 我今天花了几个小时在谷歌上搜索大多数解决方案都过时了。我在项目所遵从的窗口上使用eclipse,但我无法使它成为一个独立的应用程序,如果没有: 有哪些方法可以将JavaFX11项目导出到可执行jar中,而无需在导出后将其链接到JavaFX-SDK-11.0.2? 谢了。

  • 我已经创建了一个Netbeans Gradle项目,我正试图找到将其导出到。jar文件,以便可以从IDE外部打开它。我在我的项目中使用依赖项,我收到了一个java。lang.NoClassDefFoundError。 为了解决这个问题,我尝试添加 为了我的身材。格雷德尔档案。然而,这带来了一个java。lang.SecurityException:清单主属性的签名文件摘要无效。 为了解决这个问题,