【发布时间】:2012-09-16 09:37:28
【问题描述】:
我可以用 Eclipse 制作一个可执行的 jar 文件。假设它叫ast.jar,主类是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目录。
可执行 jar 文件背后的魔力是什么?为什么解压后不运行?
【问题讨论】:
-
你应该尝试用 ant 创建你的 JAR,不要使用 eclipse 黑魔法。
-
当你运行
java -jar ast.jar时你的类路径是什么。当你解压 jar 文件时,你的类路径是.。我猜有一个环境变量 CLASSPATH 设置为允许java -jar ast.jar工作的东西。
标签: java jar executable-jar