gpt4 book ai didi

java - 可执行 Jar 的 NoClassDefFoundError

转载 作者:行者123 更新时间:2023-11-29 06:24:43 25 4
gpt4 key购买 nike

可能是 exec jar 的一个非常常见的问题。我正在尝试创建并运行一个可执行 jar,这让我发疯。

我有几个类(带有包 stmts),其中一个有一个 main 方法,一个简单的空构造函数,当然还有一些 biz 方法,这些构成了一个小型 eclipse 项目的一部分。
我使用 build.xml 将这些文件和 list 文件捆绑到一个 jar(arc.jar) 中。我的程序使用 jdom 库并且还引用了我的其他 eclipse 项目之一,因此我在构建 arc.jar 时包括了 jdom 库和其他 biz 库。

这是我写的Manifest.MF,Main-Class后面多了一行

Manifest-Version: 1.2  
Class-Path: jdom.jar other.jar
Main-class: uk.co.Art

当我解压缩这个 arc.jar 时,它包含 jdom.jar、other.jar、META-INF/Manifest.mf 和包含我的类的包。有趣的是,jar 中的 Manifest 文件看起来像这样 -

Manifest-Version: 1.2 
Created-By: 14.2-b01 (Sun Microsystems Inc.)
Main-class: uk.co.Art
Class-Path: jdom.jar other.jar

我得到了 ClassNotFoundException ClassNotFoundException: uk.co.Art当 Main class 的值没有包时。使用包,错误更改为 ClassNotFoundException: org.jdom.JDOMException .
因此,出于测试目的,我尝试使用 c:\ 给出完整路径。对于我的执行类和 jar ,但它仍然无法找到主类,错误 ClassNotFoundException: uk.co.Art .
我似乎不明白为什么。
我使用的命令行是 - java -jar Arc.jar
cmd 提示符下的版本是 -
java version "1.6.0_16"<br/>
Java(TM) SE Runtime Environment (build 1.6.0_16-b01)<br/>
Java HotSpot(TM) Client VM (build 14.2-b01, mixed mode)

而eclipse安装的jre是jre6

大家有什么建议吗?

Alex' solution did solve the problem for local execution.
I am also thinking of another way(as an extra option) of execution, to deploy the Arc.jar on server and run a batch on that machine which basically sets the java classpath and then calls either the jar or directly the class whichever way it works. But its only an option, not a preferred one though.
Or, also, set that classpath in my manifest and build jar locally and deploy on the server.
Would like to try out a few things though. But now I understand that the basic problem was jars into jar and hence classpath issue.

非常感谢大家。

最佳答案

您不能在一个 JAR 中捆绑其他 JAR。它们必须位于同一文件夹中,或者至少位于与 Arc.jar 相关的文件夹中。然后在 Class-Path 条目中指定它的相对路径。

然而,Eclipse 有一个有用的导出工具,它允许您将其他 JAR 的内容嵌入到您的 JAR 中,这样您就不会最终得到多个需要放置在特定位置的松散 JAR。当您选择Export > Runnable JAR file 时,选中第二个Library Handling 选项。

alt text

选择软件包需要库中的生成JAR ,然后Eclipse将添加一个特殊的classloader,该classloader将在执行主类之前为您加载这些JAR的透明度。这是在 JarRsrcLoader 的帮助下完成的.

关于java - 可执行 Jar 的 NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4518957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com