2013-03-17 30 views
-1

我的目的是要测试一个小程序,像由Eclipe获取可执行Java程序

public class World 
{ 
    public static void main(String[] args) 
    { 
     System.out.println("Foobar World"); 
    } 
} 

对终端执行。我在计算器中使用了很好解释的文档 - 如何在Eclipse中构建Java项目?。但是在执行World.jar时...

$ java World 
    Exception in thread "main" java.lang.NoClassDefFoundError: World 
    Caused by: java.lang.ClassNotFoundException: World 
      at java.net.URLClassLoader$1.run(URLClassLoader.java:217) 
      at java.security.AccessController.doPrivileged(Native Method) 
      at java.net.URLClassLoader.findClass(URLClassLoader.java:205) 
      at java.lang.ClassLoader.loadClass(ClassLoader.java:321) 
      at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 
      at java.lang.ClassLoader.loadClass(ClassLoader.java:266) 
    Could not find the main class: World. Program will exit. 

是类路径导致此错误吗?我以为日食安排这一切对我来说....执行应该没事的

-rw-rw-r-- 1 Foo Foo 1254 Mar 17 19:40 World.jar 

我怎么会错过,一旦它的作品我能不能用相同的操作系统的文件复制到另一台电脑没有设置建立任何课程路径?

+1

您是否试图将您的项目导出为可执行的jar? – mre 2013-03-17 19:00:56

回答

3

您需要运行一个.jar文件作为java -jar World.jar。另外,您的.jar文件需要一个文件,META-INF/MANIFEST.MF带有一个Main-Class:标题,告诉Java该.jar内执行的是哪个类。

Eclipse 可以适当打包您的代码并生成此标头,但默认情况下不会执行此操作。您需要在其JAR设置中拨打File > Export > Java > Jar。 (根据this FAQ,这可能会过时。)也可能有一种方法可以告诉Eclipse在构建时自动生成这样的JAR。

还要记住,使用第三方库时这还不够。不知道Eclipse是否有这方面的任何东西。您必须设置Class-Path:清单条目,或者使用Maven's shade plugin或独立工具(如Jar Jar Links)可能会更方便。

+0

我只是看着World.jar,文件MANIFEST.MF和World.java就是META-INF文件夹。 MANIFEST.MF包含以下信息:Manifest-Version:1.0 Sealed:true Main-Class:World – Fendrix 2013-03-17 19:05:32

+1

@Fendrix然后它应该只需要用'java -jar World.jar'运行它 – millimoose 2013-03-17 19:06:25

+0

然后我得到Exception在线程“main”java.lang.UnsupportedClassVersionError:World:Unsupported major.minor version 51.0 – Fendrix 2013-03-17 19:10:47