我在java中使用eclipse ide创建了一个简单的项目来测试log4j的功能。 我需要使用java中的jar工具从命令提示符运行应用程序。 logtest.java文件是简单的java文件,它定义了一个记录器,如下所示。 它引用了另一个Jar文件中的Logger。下面是目录结构。
package com;
import org.apache.log4j.Logger;
public class logtest {
private static Logger logger = Logger.getLogger(logtest.class);
public static void main(String[] args) {
System.out.println("---------------HIIIIII-----------");
}
下面是我在eclipse项目中创建的目录结构。
src/com/logtest.java
lib/log4j-1.2.17.jar
清单文件条目如下,我手动创建了maifest文件。
Manifest-Version: 1.0
Main-Class: com.logtest
Class-Path: lib/log4j-1.2.17.jar
Jar文件的内容如下所示,我使用jar实用程序解压缩。
META-INF/MANIFEST.MF
.project
com/logtest.class
manifest.mf
lib/log4j-1.2.17.jar
.classpath
我已导出jar文件,当我尝试使用commond java -jar JarTest2.jar运行时,我收到以下错误
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger
at com.logtest.<clinit>(logtest.java:6)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
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
我知道它找不到类的异常,但奇怪的是,当我使用jdk1.5和运行命令工具创建jar时,jar运行成功并且java类执行时没有任何错误。
我不知道为什么会这样,因为一切都是一样的。
我是一台64位的Windows 7机器,另一台运行它的机器是一台32位的XP机器。当然,两台机器上的eclipse ide版本都不同。
请你告诉我我正在做的事情有什么不对,或者我错过了其他的事情。
由于 Vikeng21
答案 0 :(得分:1)
我很确定Java不支持嵌入式Jars。我建议将lib / log4j-1.2.17.jar文件移出到文件系统(这样它就会在与可执行文件Jar相同的架构中创建一个子文件夹./lib;看看是否有所作为。< / p>
如果您真的想使用嵌入式Jars,可以阅读One-Jar
您的目录结构应为
.\JarTest2.jar
.\lib\log4j-1.2.17.jar
在您的文件系统上。 log4j
Jar不应嵌入(包含在JarTest2.jar
文件中
答案 1 :(得分:0)
请检查您的log4j.jar是否重复。例如,一个log4j.jar位于lib文件夹下,另一个位于eclipse的Referenced库下。如果重复,请删除一个jar并重新部署。