- ベストアンサー
JavaソースコードをコンパイルするJavaプログラム
タイトルの通りですが、Javaソースコードをコンパイルし、実行するJavaプログラムを作りたいのですが、なにか有効な方法はありますでしょうか。 Runtime.getRuntime().exec( "javac Test.java" ); のようにすると、エラーになります。 なにか良い方法をご存知でしたら、よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
Javaのソースコードをコンパイルするのでしたら、Runtime.getRuntime().exec()を使ってもいいですけど、com.sun.tools.javacを使っては? これは、JDKのjavacコマンドが実行されるときに内部から呼び出されるコンパイルクラスです。 // 以下をimport // import com.sun.tools.javac.*; Main main = new Main(); String[] param = {"./Sample.java"}; main.compile(param); 例えばこんな具合にしてcom.sun.tools.javacのMainインスタンスを作成し、ファイルパスの配列を引数にしてcompileを呼び出してやります。わざわざexecで外部のタスクとして起動するより、こちらのほうがスマートかと。
その他の回答 (1)
- PCFREAK
- ベストアンサー率51% (417/805)
ちゃんと出来ますよ。 おそらく、javacのPATHが通ってないのと、Test.javaのパスが指定されていないからでしょう。 何故ならばRuntime.execした場合、環境変数は引き継がれませんのでPATHの設定をやり直してやる必要があると思われます。 javacのパスが"C:\Program Files\Java\jdk1.5.0_05\bin" Test.javaのパスがC:\temp である場合、 Runtime.getRuntime().exec( "C:\\Program Files\\Java\\jdk1.5.0_05\\bin\\javac c:\\temp\\Test.java" ); でOKです。
お礼
Runtime.execは環境変数を引き継がないんですね。 他のところでも同じ質問をしたのですが、 com.sun.tools.javac.Main.compile(String[] args); という方法でもできるようです。 アドバイスありがとうございます。
お礼
なるほど、javac自体com.sun.tools.javacを呼び出してたんですね。 勉強になりました。ありがとうございます。