java - jar 抛出 NoClassDefFoundError

标签 java jar

我有一个项目,其结构如下:

root/
-- lib/
---- commons-cli-1.2.jar
-- src/
---- my/package/name/*.java
-- bin/
---- my/package/name/*.class
-- .classpath
-- .project
-- manifest.mf

*.class文件位于 bin/由 Eclipse 每个构建完成。我的.classpathlib/包含并编译得很好;它也可以作为“Java 应用程序”运行,与我当前的 stub 很好地配合。

当我尝试创建 JAR 并包含 lib/ 时,就会出现此问题依赖关系。从我一直发出的命令行:

jar cvfm prog.jar manifest.mf -C bin/ .

程序构建,然后当我尝试运行 java -jar prog.jar 时,我得到:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/cli/Option... (还有更多,但我无法从另一台机器复制)

我的manifest.mf看起来像:

Manifest-Version: 1.0
Main-Class: my.package.Main
Class-Path: ./lib/commons-cli-1.2.jar

在我看来,Class-Path未包含在内,并且 JAR 找不到 commons-cli-1.2.jar 中包含的类。我已将其与 JAR 创建隔离,因为我可以毫无问题地运行已编译的类。

创建 JAR 并包含 lib/*.jar 时我做错了什么?

最佳答案

我之前在 list 文件中指定类路径时遇到过问题。如果我是您,我会跳过在 list 文件中引用所需的库,而是将它们直接包含在您的 jar 中。 Eclipse 可以让您轻松地做到这一点 link

关于java - jar 抛出 NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47517622/

相关文章:

java - C++ 的类变量是否可以像 Java 一样在没有构造函数的情况下进行初始化?

java - 如何用类制作Java包

java - jarsigner 无法执行目标

java - 用于更新通知 channel 设置的 Android 通知操作

java - ProGuard 混淆

java - 添加索引到 jar 文件,引用外部 jar 文件

java - 在 Linux 上运行 selenium WebDriver jar 时出错(在 Windows 上工作正常)

java - 我安装了 Java 7 但 Eclipse 一直说 1.6 不适合这个产品

Java io : InputStream to zip file instead of its embedded files

java - 如何访问jvm默认KeyStore?