ProcessBuilderを使用してJavaからjavacを実行しようとしていますが、出力が得られず、何も起こりません。入力ストリームを読み取ろうとしましたが(読み取らないとプロセスがハングするバグがあるため)、それでも結果が得られません。最初は必要なすべてのパラメーターをjavacに渡しましたが、機能していなかったため、javac(ヘルプメッセージを出力する必要があります)だけに簡略化しました。
"C:\ Windows \ System32 \ cmd.exe / c C:\\" Program Files \ "\ Java \ jdk1.6.0_23 \ bin \ javac.exe" "C:\\" Program Files \"\を実行してみましたJava \ jdk1.6.0_23 \ bin \ javac.exe "であり、javacへのパス全体を二重引用符で囲んでいますが、それでも何もありません。
エラーが発生します
プログラム"C:\ Windows \ System32 \ cmd.exe / c C:\" Program Files "\ Java \ jdk1.6.0_23 \ bin \ javac.exe"を実行できません:CreateProcess error = 2、システムは指定されたファイルを見つけることができません
しかし、コマンドをコピーしてコマンドラインから実行すると、正常に機能します。
JavaCompilerクラスを使用してファイルをコンパイルすることは知っていますが、Javaからdosアプリケーションまたは.batファイルを実行できないため、最初にこの問題を修正したいと思います。notepad.exeのようなGUIプログラムは問題なく実行できます。
String[] commands = new String[]{
"C:\\Windows\\System32\\cmd.exe /c C:\\\"Program Files\"\\Java\\jdk1.6.0_23\\bin\\javac.exe"
};
logger.log(Level.INFO, "About to run javac with the command below:");
String commandToOutput = "";
for (String command : commands) {
commandToOutput += command + " ";
}
logger.log(Level.INFO, commandToOutput);
ProcessBuilder processBuilder = new ProcessBuilder(commands);
Process p = processBuilder.start();
編集2
String[] commands = new String[]{
"C:\\\"Program Files\"\\Java\\jdk1.6.0_23\\bin\\javac.exe", "-d", "\"" + tempDir + "\"", "-classpath", classpath
};
編集3
2番目のコマンド配列は機能するのに最初のコマンド配列は機能しないのはなぜですか。
//this gives me CreateProcess error=5, Access is denied
commands = new String[]{
"C:\\\"Program Files\"\\Java\\jdk1.6.0_23\\bin\\javac.exe"
};
//this works
commands = new String[]{
"C:\\Windows\\System32\\cmd.exe",
"/c",
"C:\\\"Program Files\"\\Java\\jdk1.6.0_23\\bin\\javac.exe",
};