• ベストアンサー

JavaソースコードをコンパイルするJavaプログラム

タイトルの通りですが、Javaソースコードをコンパイルし、実行するJavaプログラムを作りたいのですが、なにか有効な方法はありますでしょうか。 Runtime.getRuntime().exec( "javac Test.java" ); のようにすると、エラーになります。 なにか良い方法をご存知でしたら、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#49664
noname#49664
回答No.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で外部のタスクとして起動するより、こちらのほうがスマートかと。

takuro4
質問者

お礼

なるほど、javac自体com.sun.tools.javacを呼び出してたんですね。 勉強になりました。ありがとうございます。

その他の回答 (1)

  • PCFREAK
  • ベストアンサー率51% (417/805)
回答No.1

ちゃんと出来ますよ。 おそらく、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です。

takuro4
質問者

お礼

Runtime.execは環境変数を引き継がないんですね。 他のところでも同じ質問をしたのですが、 com.sun.tools.javac.Main.compile(String[] args); という方法でもできるようです。 アドバイスありがとうございます。