java - 在 JDK 1.6 中执行 Jar 文件会出现问题

标签 java

我使用 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/

相关文章:

java - 编译 .java 文件并从中执行函数

java - 检查日期是否早于 x 天(仅限工作日)

java - 使用 powermock 模拟枚举实例化

java - 如何在 php 中使用 SOAP 进行 wsdl 请求响应?

java - "outOfMemoryError java heap space"计算直方图,RAM 与时间的交易?

java - 玩2.0和IDEA。缺少 javaCore、javaJdbc、javaEbean 依赖项

java - DefaultJwtParser : how to merely decode the JWT?(无秘钥,无验证)

java - 在一维中调整 JFrame 的大小

java - 谷歌应用程序引擎在第一次坚持后默默地坚持失败

java - 如何将单击的单选按钮的值传递给 Spring MVC Controller ?