-1

私の意図は、次のような小さなプログラムをテストすることです

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

ターミナルで実行します。stackoverflow でよく説明されているドキュメントを使用しました - How do I build a Java project in Eclipse? . しかし、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

何を見逃していますか?それが機能したら、クラスパスを設定せずに、同じオペレーティングシステムを使用する別の PC にファイルをコピーできますか?

4

1 に答える 1

3

.jarとしてファイルを実行する必要がありますjava -jar World.jar。また、.jarファイルにはファイルが必要であり、その中のどのクラスを実行するかをJavaにMETA-INF/MANIFEST.MF伝えるMain-Class:ヘッダーが必要です。.jar

Eclipseコードを適切にパッケージ化してこのヘッダーを生成できますが、デフォルトではこれを行いません。の下の JAR 設定をいじる必要がありますFile > Export > Java > Jar(この FAQによると、これは古い可能性があります。)ビルド時にそのような JAR を自動的に生成するように Eclipse に指示する方法もあるかもしれません。

また、サードパーティのライブラリを使用する場合、これでは不十分であることにも注意してください。Eclipse にこれに対する何かがあるかどうかはわかりません。マニフェスト エントリを設定する必要があります。または、 Maven の shade プラグインまたはJar Jar Linksのようなスタンドアロン ツールClass-Path:を使用する方が便利な場合があります。

于 2013-03-17T19:01:21.340 に答える