10

Ant から Java タスクを実行しようとしています。「org.apache.tools.ant.launch.Launcher」クラスを実行しようとしています。クラス名を指定せずに「NoClassDefFoundError」を取得し続けます。また、「メインクラスが見つかりませんでした:.プログラムは終了します」というメッセージを表示するとともに、「ClassNotFoundException」も取得しています。ここにエラーのスニペットがあります

 [java] Exception in thread "main" java.lang.NoClassDefFoundError: 
 [java] Caused by: java.lang.ClassNotFoundException: 
 [java]  at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
 [java]  at java.security.AccessController.doPrivileged(Native Method)
 [java]  at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
 [java]  at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
 [java]  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
 [java]  at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
 [java]  at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
 [java] Could not find the main class: .  Program will exit.
 [java] Java Result: 1

現在、ant jar から ant クラスを実行しようとしていますが、「classpathref」属性を使用してこのクラス ファイルが存在するクラスパスを指定していますが、それでもこのメッセージが表示されます。Ant jar をチェックしてマニフェストを確認したところ、「メイン」クラスが適切に指定されています (「org.apache.tools.ant.launch.Launcher」です)。私はすべてのリソースを使い果たしました。助けてください !! !

ps: 私の環境は Ubuntu 9.04 の Eclipse です。

4

8 に答える 8

6

ほとんどの場合、クラスパスが正しく構成されていません。

少なくとも、CLASSPATH には次のものが含まれている必要があります。

  • ant.jar および ant-launcher.jar
  • XML パーサーの jar/classes
  • JDK に必要な jar/zip ファイル

アリのマニュアルより)

また、現在のディレクトリで ant を再起動しているようです (同じ build.xml を実行しています)。「dir」プロパティを設定したくなるかもしれません。

于 2010-05-21T22:09:47.707 に答える
4

AntタスクがJavaを実行しようとしているように見えますが、実行するクラスの名前として空の文字列をJVMに渡しています。引用符で囲まれた空の文字列を使用してJVMを直接実行すると、同じスタックトレースを取得できます。

C:\> java ""
スレッド"main"java.lang.NoClassDefFoundErrorの例外:
原因:java.lang.ClassNotFoundException:
        java.net.URLClassLoader $ 1.run(URLClassLoader.java:202)で
        java.security.AccessController.doPrivileged(ネイティブメソッド)で
        java.net.URLClassLoader.findClass(URLClassLoader.java:190)で
        java.lang.ClassLoader.loadClass(ClassLoader.java:307)で
        sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:301)で
        java.lang.ClassLoader.loadClass(ClassLoader.java:248)で
メインクラスを見つけることができませんでした: 。プログラムは終了します。

(これはWindows上にありますが、それほど大きな違いはないと思います。)

私は、akfの答えに対するAlexanderPogrebnyakのコメントをフォローアップすることを提案することしかできません。おそらく、webtest.libプロパティにはスペースがありますか?

また、 antタスクantを使用するのではなく、Javaを介して直接呼び出す理由はありますか?

于 2010-06-19T10:14:16.010 に答える
3

https://blogs.oracle.com/sreekanth/entry/java_lang_noclassdeffounderror_org_codehaus

java.lang.NoClassDefFoundError: org/codehaus/plexus/classworlds/launcher/Launcher
By sreekanth on Nov 23, 2010

最近、いくつかのMavenスクリプトを実行しようとすると、次の例外が発生します。

Exception in thread "main" java.lang.NoClassDefFoundError: org/codehaus/plexus/classworlds/launcher/Launcher

Caused by: java.lang.ClassNotFoundException: org.codehaus.plexus.classworlds.launcher.Launcher
 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)

Could not find the main class: org.codehaus.plexus.classworlds.launcher.Launcher.  Program will exit.

さまざまな組み合わせを試してみたところ、環境変数にM2_HOMEとM3_HOMEの両方が設定されていることが原因であることがわかりました。環境変数からM2_HOMEを削除すると、これを再び機能させることができます。これにより、深刻な問題を回避できる可能性があります。誰かのための時間。

于 2012-12-01T20:39:58.340 に答える
1

これは、実際にはクラスパスから欠落しているクラスに関するものではない、誤解を招くエラーである可能性があります。Tomcat を使用している場合、$CATALINA_BASE/conf に conf ファイルがないことが原因である可能性があります

また、ant のインストールが正しく構成されていない可能性もあります。JAVA_HOME および ANT_HOME の環境変数を確認するか、別の ant のインストールを試してください。

于 2010-05-20T10:15:43.057 に答える
1

Ant ランチャーは次のパラメーターを想定しています

java -Dant.home=c:\ant org.apache.tools.ant.launch.Launcher [options] [target]

build.xml ファイル全体を貼り付けない場合、回答を進めることができません。

以下のように完全なサンプルを提供してみてください。

   <java
            classname="org.apache.tools.ant.launch.Launcher"
            fork="true"
            failonerror="true"
            dir="${sub.builddir}"
            timeout="4000000"
            taskname="startAnt"
    >
        <classpath>
            <pathelement location="${ant.home}/lib/ant-launcher.jar"/>
        </classpath>
        <arg value="-buildfile"/>
        <arg file="${sub.buildfile}"/>
        <arg value="-Dthis=this"/>
        <arg value="-Dthat=that"/>
        <arg value="-Dbasedir=${sub.builddir}"/>
        <arg value="-Dthe.other=the.other"/>
        <arg value="${sub.target}"/>
 </java>

これは、誤解の可能性を提供するのに非常に役立ちます。

お役に立てれば、

エルナーニ

于 2010-05-22T07:16:29.340 に答える
0

この行から:

[java] Could not find the main class: .  Program will exit.

java.exe への呼び出し.は、クラス名が必要な場所を見つけているようです。-cpおそらく、コマンドラインでクラスパスを指定しようとしているのに、 or-classpathフラグを付けることを怠っているのでしょう。

于 2010-01-29T00:20:29.493 に答える
0

疑わしい場合は、ant -v を呼び出して、すべての変数宣言と、Java に送信されたコマンドライン全体を監視してください。

特定のパスのような量は熱心に評価されますが、他の量は遅延評価されます。私のAntスクリプトが後のタスクで使用されるjarを作成することを意図していたときに、前者の1つを使用したときに多くの問題が発生しました。その後、呼び出しを実行するまでに、クラスパスから jar が削除されていました。

大まかな推測をしなければならないとしたら、コマンドラインは次のようになっているに違いありません。

java ... -classpath org.apache.tools.ant.launch.Launcher

それ以外の

java ... -classpath foo.jar;bar.jar org.apache.tools.ant.launch.Launcher

あなたが期待したように

于 2010-06-24T23:18:07.863 に答える
0

最近、同様の問題がありました。原因は Java タスクの下の 2 つのタグで、値が設定されていなかったため、2 つの空のコマンド引数が発生し、最終的にコマンド ラインに 2 つのスペースがありました。何らかの理由で、Unix はそれを正しく処理しません。Red Hat 5 と Ubuntu の両方で同じエラーが表示されました。Windows 7では問題ありませんでした。これらの引数をデフォルトのダミー値に設定すると、問題が解決しました。

于 2013-04-18T12:29:14.263 に答える