我使用 eclipse ide 在 java 中创建了一个简单的项目来测试 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