JavaからAntを実行するときにJAVA_HOMEを設定する
質問
理由は長く退屈ですが、Antスクリプトを実行してJava 1.4アプリからJava 1.5コードをコンパイルする必要があります。ただし、このエラーは引き続き表示されます:
BUILD FAILED
build.xml:16: Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK.
It is currently set to "C:\j2sdk1.4.2_16\jre"
私のコードには、次のものがあります。
Project p = new Project();
p.setUserProperty("ant.file", buildFile.getAbsolutePath());
p.setProperty("java.home", "C:\Program Files\Java\jdk1.6.0_04");
p.fireBuildStarted();
p.init();
// so on and so forth
しかし、それは無視します。 p.setUserProperty(String、String)も試しましたが、それでもうまくいきません。別のプロセスを起動せずにそれを行う方法はありますか?
解決
ビルドファイルのjavacタスクにはfork="yes"
がありますか?そうでない場合、java.home
プロパティが何に設定されているかは関係ありません。 antは、同じJavaプロセスでjavac Main
メソッドを呼び出そうとします。これは、エラーから、JDKではなくJREです。
編集 javacタスクのexecutable
プロパティをjavac
バイナリへのフルパスに設定して、タスクにcompiler="extJavac"
を追加してみてください。
他のヒント
バックスラッシュを2つにすべきではありませんか?
p.setProperty("java.home", "C:\\Program Files\\Java\\jdk1.6.0_04");
環境変数JAVA_HOMEおよびANT_HOMEを適切に設定しましたか?コード経由で設定している場合でも動作します。
また、%JAVA_HOME%\ binディレクトリ%ANT_HOME%\ binが環境変数 'path'にある必要があるかどうかを確認します。
問題は、%JAVA_HOME%\ binがenvtに存在しないことにあるようです。ただし、変数パス。
この作業を行う別の方法は、「tools.jar」をクラスパスに追加することです。 javacコンパイラはこのjarに含まれています。
java -cp $ JAVA_HOME / lib / tools.jar ...
javacオプションはtools.jarで利用可能です。 Eclipseでは、JRE HOMEがjdkを指している場合でも、すべてのシステムライブラリはJDK_HOME \ jre \ libを指します。 tools.jarはありません。 tools.jarを外部Jarファイルとして追加できます。これで問題が解決するはずです