【问题标题】:Error building jar file with Eclipse [duplicate]使用 Eclipse 构建 jar 文件时出错 [重复]
【发布时间】:2015-08-15 16:14:20
【问题描述】:

所以我在 Eclipse 上创建了一个项目,我想用它创建一个 JAR 文件。 项目文件夹包含以下文件夹:

  • src(包含两个包)
  • JRE 系统库
  • 引用的库(“jasypt-1.9.2.jar”和“json_simple-1.1.jar”)
  • libs(同样:“jasypt-1.9.2.jar”和“json_simple-1.1.jar”)
  • 资源(包含图像和文件)

如果我去: rclick 项目名称 -> 属性 -> Java 构建路径 -> 库

我看到两个库都已正确添加到构建路径中。

然后我去 rclick 项目的名称 -> 导出 -> JAR 文件 在这里我导出所有内容(只是为了确定..!)。然后我将 MainClass 作为入口点,然后创建 JAR 文件没有任何问题。

当我提取 JAR 文件 (registry.jar) 时,我看到它包含了它需要的所有内容: [package1、package2、META-INF、库、资源、.classpath、.project]

此外,.classpath 是正确的(至少在我看来……不是 100% 肯定!):

   <?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry exported="true" kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
    <classpathentry exported="true" kind="lib" path="libs/jasypt-1.9.2.jar"/>
    <classpathentry exported="true" kind="lib" path="libs/json_simple-1.1.jar"/>
    <classpathentry kind="output" path="bin"/>
</classpath>

但是当我从命令行(Windows 和 Ubuntu)执行 registry.jar 文件时,像这样:

java -jar registry.jar

我明白了:

Exception in thread "main" java.lang.NoClassDefFoundError: org/json/simple/parser/ParseException
at ...
at ...
Caused by: java.lang.ClassNotFoundException: org.json.simple.parser.ParseException
at java.net.URLClassLoader$1.run<Unknown Source>
at ...
at ...
... lots more

程序在 Eclipse 中编译并完美运行。 我就是想不通是什么问题...

【问题讨论】:

  • 我认为引用的帖子将解决您的问题。罐子里有罐子是不常见的。
  • 提取你的jar文件并通过执行命令jar -xtvf 检查库是否存在
  • @RobertMoskal 谢谢,但这不是同一个问题。我正在尝试直接从 eclipse 生成 JAR,然后运行它。
  • 我认为这是同样的问题。您正在生成 jar,然后尝试在 eclipse 之外运行它。在 jar 的 lib 目录中包含 jar 需要一种特殊的技术,例如使用 onejar。

标签: java eclipse maven jar noclassdeffounderror


【解决方案1】:

.classpath 文件对 Java 没有意义。它仅由 Eclipse 使用。 Java 无法识别所需的库位于 Jar 文件中的 lib 条目下。

您必须通过命令包含库的路径:

java -jar registry.jar -cp lib

在这种情况下,lib 是位于导出的 Jar 旁边的文件夹。

如果您使用的是 Maven,则可以通过程序集插件生成可执行文件。见How can I create an executable JAR with dependencies using Maven?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-23
    • 1970-01-01
    • 2018-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多