eclipse背后的魔力生成了可执行的jar文件

时间:2012-09-24 21:38:41

标签: java jar executable-jar

我可以用Eclipse制作一个可执行的jar文件。假设它被称为ast.jar,Main类是ASTExplorer。我可以验证这适用于java -jar ast.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文件背后的魔力是什么?解压后为什么不运行?

1 个答案:

答案 0 :(得分:2)

当Eclipse打包一个可运行的jar时,它包含作为嵌套jar文件的依赖项,还包括一个特殊的类加载器,它理解如何在嵌套的jar中查找类。它仅适用于嵌套的jar,当你提取所有内容时,它会阻止它工作。

我看过一个Eclipse生产的可运行的jar,这就是我认为你需要做的事情:

  1. 将所有内容解压缩到目录。依赖项jar在顶级目录中提取
  2. 删除org / eclipse / jdt / internal目录
  3. 使用

    从顶级目录运行主类

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

  4. 我用一个可运行的罐子尝试了这个,我碰巧躺在那里,它的工作原理。第2步并非绝对必要。

相关问题