-1

我的目的是测试一个小程序,比如

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

在终端上执行。我在 stackoverflow 中使用了解释清楚的文档 -如何在 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.

类路径是否导致此错误?我以为eclipse为我安排了这一切......执行应该没问题

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

我错过了什么,一旦它工作,我可以将文件复制到具有相同操作系统的另一台 PC 而不设置任何类路径?

4

1 回答 1

3

您需要将.jar文件作为java -jar World.jar. 此外,您的.jar文件中需要一个文件,其中META-INF/MANIFEST.MF包含一个Main-Class:标头,告诉 Java.jar要执行其中的哪个类。

Eclipse可以适当地打包您的代码并生成此标头,但默认情况下它不会这样做。你需要在它的 JAR 设置中四处寻找,在File > Export > Java > Jar. (根据这个可能已经过时的常见问题解答。)还有一种方法可以告诉 Eclipse 在构建时自动生成这样的 JAR。

还要记住,这在使用第三方库时是不够的。不知道 Eclipse 是否对此有任何帮助。您要么必须设置清单条目,要么使用Maven 的 shade 插件或像Jar Jar LinksClass-Path:这样的独立工具可能更方便。

于 2013-03-17T19:01:21.340 回答