所以我在eclipse上创建了一个项目,我想用它创建一个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中编译并完美运行。 我只是无法弄清楚问题是什么......
答案 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?。