我正在使用Eclipse,我有一个非常简单的项目,我会保存代码。它执行得很好,运行得很好。它有两个.java文件,实际上,项目树是这样的:
**mewLog**
- src/ (dir)
mewlog/ (package)
- MLGlobal.java
- MLMain.java (surprise, this one contains main and some initialization methods)
mlGUI/ (package)
- this one is empty (empty package!)
所以,我去文件 - >出口。我按照惯例按照步骤操作,它使我的.JAR文件很好,没有任何警告或问题。好!
到目前为止,人们会说这么好,所以我赶紧去我的终端,导航到我导出我的jar的文件夹,并执行如下:
java -jar mewLog_macosx-x86.jar
BAM!这里出错了,终端给了我以下输出:
Exception in thread "main" java.lang.NoClassDefFoundError: MLMain
Caused by: java.lang.ClassNotFoundException: MLMain
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
确定。在你说“哦,你需要添加一个类路径”之前。我试过,它不起作用,只要给我“BLAH”,无论我做什么。
我正在使用Mac OS X Snow Leopard。
jar -tf mewLog_MacOSX-x86.jar
jar -tf mewLog_MacOSX-x86.jar
META-INF/MANIFEST.MF
.project
.classpath
mewlog/MLGlobal.class
mewlog/MLMain.class
答案 0 :(得分:2)
确实
java -cp mewLog_macosx-x86.jar mewlog.MLMain
工作?
如果是这样,那么Jar中的清单文件指向错误的Main-Class(不考虑包裹)
答案 1 :(得分:1)
首先,.java文件不会进入JAR文件 - .class文件。 JVM无法执行.java文件。你必须先编译它们。
其次,如果您打算将其作为可执行的JAR,则必须添加一个清单,指定具有main方法的类。
最好将Eclipse从中取出并在第一次手动完成。使用/ bin目录中的jar.exe工具。
Here's可能(或可能不)帮助您的链接。
答案 2 :(得分:1)
您的问题是需要使用其完全限定名称列出主类,即包含程序包。 Java正在寻找类MLMain
,这意味着它直接在类路径根目录中查找。但是,您的班级mewlog.MLMain
位于mewlog
包内。
答案 3 :(得分:0)
愚蠢的问题,但您选择了“文件 - >导出 - > Java |> JAR文件”或“文件 - >导出 - > Java-> Runnable JAR文件”?除非Manifest.MF文件告诉VM主类是什么,否则jar默认情况下不可运行。
答案 4 :(得分:0)
您必须将已编译的类放在jar中,并在清单文件中指定哪个是主类。
在终端试试这个:
$cat Hola.java
package hola;
class Hola {
public static void main( String ... args ) {
System.out.println("Hola mundo!");
}
}
$cat m.mf
Main-Class: hola.Hola
$javac -d . Hola.java
$jar -cmf m.mf hola.jar hola
$java -jar hola.jar
Hola mundo!
然后比较你的jar的内容,看看有什么不同(除了明显不同的类名)
这里的要点是确定jar文件的结构是否正确(提供jar -tf mewLog_macosx-x86.jar
的输出也会有帮助)
我希望这会有所帮助。
答案 5 :(得分:0)
我建议
使用java -jar从命令行创建JAR文件并熟悉构建过程。请参阅http://download.oracle.com/javase/tutorial/deployment/jar/basicsindex.html