2009-07-15 9 views
2

Eclipse内で単純なJavaクラスをコンパイルして実行しようとしています。コンパイルタスクはうまく動作し、コピー先のフォルダを指定しないので、ビルドファイルはソースと同じディレクトリにあります。私が必要とするのは、main()メソッドでどのようにクラスを実行できるかを知ることだけです。AntのjavaタスクとクラスパスでClassNotFoundExceptionが発生する

は私が単独でクラス名(パッケージ名、などで)クラスの完全修飾名を使用してみましたが、いつも私は目標が取られ、

Buildfile: C:\Users....\build.xml 
    run: 
     [java] java.lang.NoClassDefFoundError: code/control/MyClass 
     [java] Caused by: java.lang.ClassNotFoundException: code.control.MyClass 
     [java]  at java.net.URLClassLoader$1.run(Unknown Source) 
     [java]  at java.security.AccessController.doPrivileged(Native Method) 
     [java]  at java.net.URLClassLoader.findClass(Unknown Source) 
     [java]  at java.lang.ClassLoader.loadClass(Unknown Source) 
     [java]  at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
     [java]  at java.lang.ClassLoader.loadClass(Unknown Source) 
     [java]  at java.lang.ClassLoader.loadClassInternal(Unknown Source) 
     [java] Could not find the main class: code.control.MyClass. Program will exit. 
     [java] Exception in thread "main" 
     [java] Java Result: 1 
    compile: 
    default: 
    BUILD SUCCESSFUL 
Total time: 234 milliseconds 

以下にjava.lang.ClassNotFoundExceptionに取得します私のbuild.xmlファイルから:

<target name="default" depends="compile" description="learn"> 

</target> 

    <target name="compile" depends="run"> 
      <javac srcdir="src/" /> 
    </target> 

    <target name="run"> 
    <java classname="code.control.MyClass" fork="true"/> 
</target> 

私はクラスが見つからない理由を理解できません。 MyClassにはmain()メソッドが含まれています。クラスパスを指定しないので、現在のディレクトリを参照する必要があります。これはsrc/rightですか?

開発ディレクトリは、通常の日食のファイル構造である:

PROJECTNAME/SRC /コード/制御/ MyClassの

それはクラスパスの問題であればどのように私はそれを解決するだろうか?私はいつも "あなたのクラスパスに入れてください"というコンセプトをつかむ問題を抱えていました...誰かがクラスパスでの蟻の文脈の説明を少し提供できれば、とても感謝しています。

ありがとうございました。 antのバージョンは1.7.0

+0

ノートにClassNotFoundExceptionsとNoClassDefFoundErrorsは同義ではないこと。 – akf

+0

ターゲット "コンパイル"が "実行"に依存していることに気付きましたか? だから、実行をコンパイルする前に呼び出されます... 修正: (...) <ターゲット名は= "コンパイル"><ターゲット名= "実行" を依存= "コンパイル"> (.. 。) –

答えて

8

classpathは、OSがPATH変数を使用して実行可能ファイルを検索する方法と同様に、.classファイルを検索する場所です。

は、ビルドスクリプトでこれを試してみてください:

<target name="run"> 
    <java fork="true" classname="code.control.MyClass"> 
     <classpath> 
      <path location="src/"/> 
     </classpath> 
    </java> 

アリでJavaプログラムを構築して歩くHelloWorld version for antがあります。

+0

感謝セス、それは働いた。クラスパスについては、Eclipseのインストール時に自動的に設定されないのでしょうか?私は彼がコマンドラインで任意のディレクトリからjava -versionを実行できることを知っています。 これは自動的に処理されたと思っていましたが、クラスパスに「何かを置く」必要があるときはどうしますか?私は元の質問からあまりにも逸脱していないことを願っています。 ありがとう – denchr

+0

'java -version'を使用すると、PATH変数を使用してjava実行可能ファイルが見つかります。クラスパスに何かを配置する必要がある場合は、クラスパスで指定されたディレクトリの1つに.classファイルをコピーするだけです。パッケージに何かをコピーする場合は、すべてのディレクトリが必要です。 – seth

4

などのクラスパスを含める必要があります。

<java classpath="${bin}" classname="code.control.MyClass"> 

ここで、$ {bin}は出力フォルダです。

+0

ありがとうございました。 – denchr

1
次のようにあなたのbuild.xmlを変更して試してみる

<target name="default" depends="run" description="learn"> 

</target> 

    <target name="compile" > 
      <javac srcdir="src/" /> 
    </target> 

    <target name="run" depends="compile"> 
    <java classname="code.control.MyClass" fork="true"/> 
</target> 
関連する問題