我使用 eclipse ide 在 java 中创建了一个简单的项目来测试 log4j 功能。 我需要使用 java 中的 jar 工具从命令提示符运行应用程序。 logtest.java 文件是一个简单的 java 文件,它定义了一个记录器,如下所示。 它引用另一个 Jar 文件中的记录器。下面是目录结构。
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
list 文件条目如下,我已经手动创建了 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的版本是不一样的。
能否请您告诉我我正在做的事情是否有问题,或者我是否遗漏了其他事情。
谢谢 维肯21
最佳答案
我很确定 Java 不支持嵌入式 Jar。我建议将 lib/log4j-1.2.17.jar 文件移出文件系统(以便它在与可执行文件 Jar 相同的 drctory 中创建一个子文件夹 ./lib 并查看是否有所不同。
如果你真的想使用嵌入式 Jars,你可以阅读 One-Jar
你应该有一个目录结构
.\JarTest2.jar
.\lib\log4j-1.2.17.jar
在您的文件系统上。 log4j
Jar 不应嵌入(包含在)JarTest2.jar
文件
关于java - 在 JDK 1.6 中执行 Jar 文件会出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11924971/