web-dev-qa-db-ja.com

Java / Groovyでシステムコマンドを呼び出す方法

私がやりたいのは、グルーヴィーなスクリプトからmavenを呼び出すことです。問題のgroovyスクリプトは、タグをダウンロードして、ダウンロードされたものに対してMavenを呼び出すことにより、J2EEプロジェクトを構築するためのMavenラッパーとして使用されます。 EARをビルド/パッケージ化するためにmavenを呼び出すにはどうすればよいですか(groovyスクリプトはすでにSCMからタグをダウンロードできます)。

30
Zombies

Groovyで外部プロセスを呼び出す最も簡単な方法は、文字列に対してexecute()コマンドを使用することです。たとえば、groovyスクリプトからmavenを実行するには、次のコマンドを実行します。

"cmd /c mvn".execute()

コマンドの出力をキャプチャして、おそらく出力したい場合は、次のようにできます。

print "cmd /c mvn".execute().text

最初の「cmd/c」は、Windowsコマンドシェルを呼び出します。 mvn.batはバッチスクリプトなので、これが必要です。 Unixの場合、システムシェルを呼び出すことができます。

40
Chris Dail

するのと同じくらい簡単です

"yourCommand".execute();

実行されたコマンドの印刷出力を標準出力で取得したい場合は、

def proc = "yourCommand".execute();
proc.waitForProcessOutput(System.out, System.err);

あなたが行うことができる出力を保存して処理したい場合

def proc = "yourCommand".execute();
def outputStream = new StringBuffer();
proc.waitForProcessOutput(outputStream, System.err);
println(outputStream.toString());
23
Aniket Thakur

Java 7+ stdio redirectionの場合:

new ProcessBuilder('cmd', …args…).redirectOutput(ProcessBuilder.Redirect.INHERIT).start().waitFor();
4
Jesse Glick

ランタイムコマンドを使用してシェルコマンドを起動できます。ここを見てください: http://Java.Sun.com/javase/6/docs/api/Java/lang/Runtime.html#exec(Java.lang.String) 後でキャプチャすることができますプロセス実行の結果(失敗したかどうかを確認するため)。

2
Alex Khvatov