2012-09-24 76 views
6

我可以用Eclipse制作一个可执行的jar文件。假设它叫做ast.jar,而Main类是ASTExplorer。我可以验证这是否适用于java -jar ast.jareclipse后面的魔法生成可执行jar文件

然后,我将jar文件解压到一个单独的目录中,并验证ASTExplorer是否在astexplorer目录中。但是当我执行这个命令java -cp . astexplorer.ASTExplorer我得到这个错误。

java -cp . astexplorer/ASTExplorer 
Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/swt/widgets/Composite 
at java.lang.ClassLoader.defineClass1(Native Method) 
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) 
at java.lang.ClassLoader.defineClass(ClassLoader.java:615) 

问题是jar文件中没有org/eclipse/swt目录。

Directory screenshot

什么是可执行的JAR文件背后的魔力?解压缩时为什么不运行?

+0

你应该尝试用蚂蚁创造你的JAR,而不是蚀食黑魔法。 –

+0

你是什么类路径,当你运行'Java的罐子ast.jar'。当你解压jar文件时,你的类路径是'.'。我猜测有一个环境变量CLASSPATH设置为允许'java -jar ast.jar'工作。 – km1

回答

2

当Eclipse包运行的JAR,它包括依赖关系嵌套的jar文件,并且还包括懂得如何找到嵌套罐类特殊的类加载器。它只适用于嵌套罐,当你提取一切,你阻止它的工作。

我看着在Eclipse生产运行的JAR,这里就是我想你需要做的:

  1. 一切解压到一个目录。依赖罐子在顶层目录
  2. 删除组织/日蚀/ JDT /内部目录
  3. 从顶层目录中

    java -cp .;dep-jar;dep-jar;... your.main.class

运行主类提取

我试图用一个可运行的jar,我恰好躺在它周围,它的工作原理。第2步不是绝对必要的。

+0

我可以使它执行使用-cp:所有的jar文件从ECLIPSE main.class。我觉得似乎比它包裹起来其他日食生成可执行的JAR文件背后没有大魔做出的jar文件自动 – prosseek

+1

加代在mainfest文件中的“jarinjar”类加载器的参考。 –

相关问题