使用Eclipse构建jar文件时出错

时间:2015-08-15 16:14:20

标签: java eclipse maven jar noclassdeffounderror

所以我在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”)
  • 资源(包含图像和文件)

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

我看到两个库都正确地添加到了Build Path。

然后我去点击Project的名字 - >出口 - > JAR文件 在这里我导出一切(只是为了确保..!)。然后我将MainClass作为入口点,然后创建JAR文件没有任何问题。

当我提取JAR文件(registry.jar)时,我发现它包含了所需的一切: [package1,package2,META-INF,libs,resources,.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中编译并完美运行。 我只是无法弄清楚问题是什么......

1 个答案:

答案 0 :(得分:0)

.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?