• ベストアンサー

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

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

  • Java
  • 回答数2
  • ありがとう数4

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

  • ベストアンサー
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); という方法でもできるようです。 アドバイスありがとうございます。

関連するQ&A

  • javaの簡単なソースがコンパイル出来ません

    Javaを始めてみましたが、最も簡単なjavaのソースがどうしてもコンパイル出来ません。 どうしたらいいのか教えて下さい。 デスクトップの以下の Hello.java に対して、 public class Hello { public static void main(String[] args) { System.out.println("Hello,World"); } } 以下の3通りの方法でコンパイルを掛けてみると、 ‥デスクトップ>javac Hello.java javac:ファイルが見つかりません:Hello.java 使い方:javac <ptions> <source files> 使用可能なオプションのリストについては-helpを使用します >javac Hello.java.txt エラー:クラス名 ‘Hello.java.txt’が受け入れられるのは、注釈処理が明示的に要求された場合だけです エラー1個 >javac Hello エラー:クラス名 ‘Hello’が受け入れられるのは、注釈処理が明示的に要求された場合だけです エラー1個 でどの場合もコンパイルされません。 なお、javaのバージョンは “1.6.0_06”で、パスも C:\Program Files\Java\jdk1.6.0_06\bin\; と設定してあります。 どうしたらコンパイルが出来るのか、教えて下さい。

    • ベストアンサー
    • Java
  • JavaでCプログラムをコンパイルするには

    linux環境で、javaによって別に作ってあるCのプログラムをコンパイルしたいのですが、execを使用して、 Runtime.getRuntime().exec("cc sample.c"); とするとコンパイルできません。 恐らくコマンドプロンプトなどを起動して指定してやればできると思うのですが、現在linux環境にないのでわかりません。 gnome-terminalかなにかだったような気がするのですが・・・。 どなたか教えていただければ幸いです。

  • Javaでコンパイルできなくなりました

    javaでコンパイルできなくなりました。今まではJava2 SDK バージョン1.4.2_03をインストールしてコマンドプロンプトからjavac、javaコマンドを用いコンパイル、実行していました。 そして、Eclipse(バーション3.0)というIDE環境に興味を持ちインストールした後にとりあえずもう一度コマンドプロンプトからjavacコンパイルしてみたらエラーがでるようになりました。 ソースを書くと長くなってしまうので簡単に説明すると、String sに"Hello World"を代入してSystem.out.println()で表示させるだけのプログラムです。Eclipseをインストールする前は実行できたのでソースに問題があるという事はありません。エラーメッセージは以下のような感じでした //エラーメッセージ 検出値 : java.lang.String 期待値 : String String s = "Hello World"; その後にソースで String s="Hello World";としていた行を java.lang.String s = "Hello World";に変更しました するとjavacではエラーが出なくなるのですがjavaコマンドで実行すると Exception in thread "main" java.lang.NoSuchMethodError: main というメッセージが出て実行できないです。 環境変数は、SDKインストール後、PATHC:\j2sdk1.4.2_03\bin;を加え、Eclipseインストール後は何も変更していません。 何が問題なのでしょうか?お願いします。

    • ベストアンサー
    • Java
  • java にてコンパイルできない。

    java にてコンパイルできない。 javaにてコンパイルそのものができません。 下記がその状況です。 java>javac test.java Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/tools/javac C:\java>set JAVA_HOME JAVA_HOME=C:\Program Files\Java\jdk1.5.0 ネットで調べてコンパネの環境設定でPATH、CLASSPATHの設定等は変更しました。 現在のところ上記の設定はJAVAのものしか入っておりません。 他のPCでは正常にコンパイル実行できますので文法の間違いはないものと思われます 何か考えられることはありますでしょうか

  • Javaプログラムでコマンド実行時のエラー

    Webアプリにて下記プラグラムを実行(Tomcat上で実行)したところ以下のような例外が でました。 cd /home/test/geniatagger-3.0.1 ディレクトリに移動するコマンドで失敗しているようですが Teraterm上で手入力で実行すると実行できます。 何が原因かわかりますでしょうか。 【例外】 java.io.IOException: Cannot run program "cd /home/test/geniatagger-3.0.1": java.io.IOException: error=2, No such file or directory at java.lang.ProcessBuilder.start(ProcessBuilder.java:475) at java.lang.Runtime.exec(Runtime.java:610) at java.lang.Runtime.exec(Runtime.java:483) 【実行したプログラム】 String[] command = {"cd /home/test/geniatagger-3.0.1", "./geniatagger", "I had a pen."}; Process process = Runtime.getRuntime().exec(command); //exec()が非同期実行であるため実行結果が返ってくるまで待つ int no = process.waitFor(); BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream())); String str = ""; while (in.ready()) { str = in.readLine(); System.out.println("segmentate=" + str); } in.close();

    • ベストアンサー
    • Java
  • Javaアプリケーション内でコンパイルはできますか?

    Javaアプリケーションから、シェルにアクセスして、Javaプログラムをコンパイルおよび実行したいのですが、できますか? 具体的には、例えば、JavaアプリケーションのメインフレームにJavaプログラムを記述するテキストエリアがあってユーザはそこにJavaプログラムを記述し、任意の名前で保存できるとします。また、メインフレームには、コマンドを実行するテキストフィールドがあり、ユーザは保存したプログラムをそこからコンパイルできる。つまり、そのテキストフィールドに、 javac xxxxx.java と入力するとコンパイルでき、 java xxxxx とすると実行できる。 このようなことをしてみたいのですが、JavaアプリケーションからWindowsもしくはUNIXのシェルと連携させることはできますでしょうか?ご存知の方よろしくお願いします。

    • ベストアンサー
    • Java
  • JAVAについて。コンパイルができません

    public class Main { public static void main(String[] args){ System.out.println("Hello World"); } } 上のソースで記述して、コマンドプロンプトでコンパイルしようとすると 下のような表示が起きます C:\Program Files\Java\jdk-12.0.1\bin>javac Main.java Main.java:1 エラー: Mainの書き込み中にエラーが発生しました: C:\Program Files\Java\ jdk-12.0.1\bin\Main.class public class Main { ^ エラー1個 何が原因でコンパイルされないかわからないです。 わかるかたいましたらよろしくお願いします。

  • ソースが階層構造になっているソースのJavacの方法

    お世話になります。 パッケージ構造になっているjavaソースをjavacコマンドを使用してコンパイルしようと思っているのですが、 その方法を教えてください。 具体的には下記のようなパッケージ(jp.co)をコンパイルするバッチファイルをc:\testフォルダ直下に置いてコンパイルしたいのです。 (javac -d . *.java)のようにバッチに書いても javac -d . *.javaを読み込めませんというエラーが表示されてしまいます。(泣) c:\  |  --test ←この階層にコンパイル.batを置く    |    ---jp      |      ---co        |        -- test1        |  |        |  --test1.java        |        -- test2           |           --test1.java 宜しくお願いします。

    • ベストアンサー
    • Java
  • コンパイルが通らない

    うちのPCでは確実にコンパイルが通って、実行までできたプログラムが他の人のPCではコンパイルが通らなかったり実行ができません。 実行する際には javac nishi.java java nishi とやると以下のようなエラーがでて実行ができません(コンパイルは通ります。決してjava nishi.classとかjava nishi.javaといったお約束の間違いは行っていません) Exception in thread "main"java.lang.NoClassDefFoundError:nishi また違うファイルではこっちでコンパイルが通るのにあっちではコンパイルが通らなかったりします。バージョンが違うためでしょうか?僕のバージョンが1.5.08?で相手が1.4.2くらいです。だからコンパイルが通らないの?

  • java  コンパイルできない

    os:WindowsXP pro jdkをインストールし メモ帳でsample.javaという名前の サンプルファイルを作り コマンドプロントで javac sample.javaと入力し コンパイルしたのですが エラー:sample.javaが読み込めません エラー 1個 と出力され、コンパイルできませんでした。 過去ログを拝見したところ、 フォルダオプションの設定で、拡張子を表示し javaファイルか確認をする ということでしたので、拡張子の表示をし、 javaのソースファイルであることは確認しました。 ただ、画面に表示されているファイルはJ#になっています。 visualbasicをインストールしているため、 javaファイルはJ#になってしまうようです。 環境変数のpathはC:\Program Files\Java\jdk1.5.0\binに設定しました。 コンパイルできるようにするために どうかご教授していただければ幸いです。 よろしくお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう