2009-03-16 24 views
5

理由は長くて退屈ですが、Java 1.4アプリケーションからJava 1.5コードをコンパイルするにはAntスクリプトを実行する必要があります。でも、私はこのエラーを取得しておいてください。私のコードでJavaからAntを実行するときのJAVA_HOMEの設定

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)を試しましたが、それはどちらかといえばやりません。別のプロセスを起動せずに実行する方法はありますか?

+0

FYI: 'java.home'は' $ JAVA_HOME'ではなく '$ JAVA_HOME/jre'に設定する必要があります。 –

答えて

5

ビルドファイルのjavacタスクにfork="yes"がありますか?そうでない場合は、java.homeプロパティに何が設定されているかは関係ありません。 antは同じJavaプロセスでjavac Mainメソッドを呼び出そうとします。エラーはJDKではなくJREです。

EDITjavacバイナリへのフルパスにあなたのjavacタスクのexecutableプロパティを設定してみてください、タスクにcompiler="extJavac"を追加します。

+0

fork = "yes"を追加すると助けになります - 少なくともjavacは動作しますが、それでも間違ったバージョンです。 –

+0

「実行可能」プロパティのようなものを探していて、それを見ていないだけでした。 javacタスクごとに設定しなければならないのは面倒ですが、うまくいきます。ありがとう。 –

1

バックスラッシュを2倍にする必要はありませんか?

p.setProperty("java.home", "C:\\Program Files\\Java\\jdk1.6.0_04"); 
+0

そうだった。私はStackOverflowに貼り付けるとき何かが間違っていたと思う。 –

0

環境変数JAVA_HOMEとANT_HOMEを適切に設定しましたか?あなたがコードを介して設定している場合、それはうまくいくはずです。

また、%JAVA_HOME%\ binディレクトリ%ANT_HOME%\ binが環境変数 'path'に含まれている必要があります。

問題は、%JAVA_HOME%\ binがenvtに存在しないことが原因です。変数パス。

0

この作業を行う別の方法は、クラスパスに 'tools.jar'を追加することです。 javacコンパイラはこのjarファイルに含まれています。 $ JAVA_HOME/libに/ tools.jarを-cp

のjava ...

0

javacのオプションは、tools.jarの中で使用可能です。 eclipseでは、JRE HOMEがjdkを指していても、すべてのシステム・ライブラリーがJDK_HOME¥jre¥libを指しています。 tools.jarはありません。 tools.jarを外部Jarファイルとして追加できます。これはあなたの問題を解決するはずです

関連する問題