创建.JAR文件失败

时间:2011-02-03 21:26:52

标签: java eclipse jar

我正在使用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

6 个答案:

答案 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)

我建议

  1. 使用java -jar从命令行创建JAR文件并熟悉构建过程。请参阅http://download.oracle.com/javase/tutorial/deployment/jar/basicsindex.html

  2. http://fjep.sourceforge.net/

  3. 安装Eclipse的Fatjar插件