java - 线程 "main"java.lang.NoClassDefFoundError : org/apache/logging/log4j/LogManager 中出现异常

标签 java ubuntu netbeans path environment-variables

我正在尝试让 log4j2 在 Netbeans 中工作。无论我做什么,我都会收到以下错误

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/logging/log4j/LogManager
at java.lang.ClassLoader.defineClass1(Native Method)

...

Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.LogManager
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)14
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)

我按照此处的说明进行操作 Setting up log4j2 并尝试运行相同的演示程序。

我尝试寻找解决方案并找到了这篇文章。 Similar Problem here

这篇文章Class not found与我的问题完全相同,但没有发布有效的答案。

我已将 log4j-core-2.8.2.jar 和 log4j-1.2-api-2.8.2.jar 添加到项目库中。这两个文件安装在主 src 文件夹的子文件夹中,因此它们位于类路径上。

Netbeans 安装在新的 Ubuntu 版本上。令人沮丧的是我能够在 Windows 机器上运行它。

我尝试仅使用此 logdemo 类创建一个全新的项目。我将 log4j2 jar 文件添加到库中。我还添加了命令 -Dlog4j.configurationFile=/home/test/config/log4j2.xml 到“运行”>“VM 选项”框。

我仍然收到完全相同的错误消息。

我检查了我的安装。

dazz@mimir:~$ java -version

java版本“1.8.0_144” Java(TM) SE 运行时环境(版本 1.8.0_144-b01) Java HotSpot(TM) 64 位服务器 VM(内部版本 25.144-b01,混合模式)

我在 setting Java Environment in Ubuntu 上找到了这篇文章。我本以为使用 apt-get 就可以设置环境,但我可能是错的。

我检查了/etc/environment 。那里没有提到 Java。 .bash.rc 中也没有导出 java 路径。 /etc/profile 中没有 java。

似乎有很多地方可以设置路径。我找到了这篇文章Setting PATH variables in Ubuntu 。它既现代又乐于助人。 我还发现了这个帖子Setting Java path variables in Ubuntu

我将以下内容添加到我的主页配置文件 ~/.profile

JAVA_HOME=/usr/lib/jvm/default-java
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
export JAVA_HOME
export PATH

注意default-java的使用。这是 JDK 的符号链接(symbolic link)。我希望如果/当我升级到下一个版本时,apt-get 会更改链接。

重启 Ubuntu 后查看是否解决了问题,没有任何变化。
欢迎任何找出问题原因的建议。

最佳答案

我在 Windows 10 PC 上安装了 Netbeans,但仍然出现相同的症状,因此我认为问题一定出在 jar 文件上。

我找到了解决方案。我使用 log4j-core-2.8.2.jar 和 log4j-1.2-api-2.8.2.jar 而不是 log4j-api-2.3.jar 和 log4j-core-2.3.jar。

无论出于什么原因,2.3 版本可以工作,而 2.8.2 版本则不能。当我更改 jar 文件时,程序在 Win 10 和 Ubuntu 下编译并运行,没有错误。

我对此非常恼火。我正在学习 Java,我喜欢这门语言,但我花在解决问题上的时间比编写代码要多得多。演示程序编译正常,仅在运行时出现错误。让 Stackoverflow 成为如此优秀资源的经验丰富的程序员并没有发现这个问题,他们为什么要发现这个问题。神秘的错误消息没有提示问题的根本原因。不应该这么困难。这是非常令人沮丧的。

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

相关文章:

r - 使用 rstudio ubuntu 服务器中另一个文件夹中的文件

java - 如何避免我们的用户没有多选项卡?

ubuntu - 如何为每个用户配置msmtprc

python - 如何卸载 setuptools python

mysql - 将 MySQL 与 Netbeans 中的 Grails 项目连接起来

java - 在最终类的构造函数中使用 "this"

netbeans - 如何在 netbeans 7.4 上设置 compass

java - Redis - 存储和获取带有详细信息的有限 key

java - Spring MVC 3中的表单提交-解释

java - 如何解决 Spring Boot 无法找到或加载主类错误?