2017-05-22 1 views
1

を見つけることができません。特に、問題とサーバーの2つのクラスがあります。ANT - Java ClassLoaderは私のプロジェクトにクラス

public class TheProblem { 
    public static void main (String args []) throws ClassNotFoundException { 
     ClassLoader.getSystemClassLoader().loadClass("Server"); 
    } 
} 

コマンドラインからコードを実行すると、すべて正常に機能します。 しかし、ANTを使ってコードを実行すると、ClassNotFoundExceptionが発生します.Server.classとTheProblem.classの両方が同じディレクトリにあります。

私のプロジェクトのディレクトリ構造は非常に簡単です - 私はここでそれを説明しようとします:私は実行

<?xml version="1.0" encoding="UTF-8" ?> 

<project name="JAXB" default="compile"> 

<path id="project.class.path"> 
    <pathelement path="${java.class.path}" /> 
    <pathelement location="build" /> 
</path> 

<target name="init" > 
    <mkdir dir="build" /> 
</target> 

<target name="compile" depends="init" > 
    <javac classpathref="project.class.path" srcdir="src" destdir="build" 
     includeAntRuntime="false" /> 
</target> 

<target name="execute-problem" depends="compile"> 
    <java classpathref="project.class.path" classname="TheProblem" /> 
</target> 

<target name="clean" depends="init"> 
    <delete dir="build" /> 
</target> 
</project> 

:ここ

root_folder/ 
- build.xml 
- src/ 
    - TheProblem.java 
    - Server.java 
- build/ 
    - TheProblem.class 
    - Server.class 

は私のbuild.xmlファイルの抜粋です。 antコンパイル、すべてがコンパイルされますが、 ant実行問題を実行すると、ClassLoaderはServerクラスを見つけることができず、ClassNotFoundExceptionをスローします。 ビルドディレクトリに移動して というjava TheProblemを呼び出すと、うまく動作します。私は本当に手がかりがない、なぜそれがANTを使用して動作しません。

この投稿を読んでいただきありがとうございます。

+0

使用パッケージを使用してみてください。クラスローディングははるかに簡単で信頼性の高いものになります。 –

+0

まだ動作しません。すべてのクラスを「メイン」パッケージに入れて、同じ例外を取得するだけです。 - しかし、コマンドラインからプログラムを実行しても動作します。 –

答えて

1

代わりの

<target name="execute-problem" depends="compile"> 
     <java classpathref="project.class.path" classname="TheProblem" /> 
    </target> 

この

<target name="execute-problem" depends="compile"> 
    <java fork="true" dir="." classname="TheProblem"> 
    <classpath> 
     <path refid="project.class.path" /> 
    </classpath> 
    </java> 
</target> 
+0

タスクに属性fork = "true"を追加することもできます。そうしないと、Ant JVMのコンテキスト内でコードを実行します。何も問題はないかもしれませんが、物事を分離しておくことは、一般的にはより安全です。 – David

+0

右、

+0

ありがとう、fork = "true"は問題を解決しました。 –

関連する問題