2011-02-08 12 views
0

Javaでビルドプロセスを自動化するユーティリティを作成したいと考えています。現在のプロセスには、複数の.batファイルプロセスを自動化するためのガイダンスが必要

  • という2つのコンソールがあります。 (これらのコンソールをJavaプログラムから開く)
  • 複数のbatファイルをコンソールで実行し、1つのバッチファイル出力に基づいて、他のコマンドを実行します。

私はどのライブラリを使用すればいいのか、頭をはじめる必要があります。 Javaから独立して2つのコンソールを開くことはできますか?私のプログラムがそれらのコンソールを閉じても、実行し続けるように。 (コンソールはbeaサーバー、startWebLogic.cmd)。

答えて

1

Alee、そうですね、Runtime.getRuntime()で実行できます。exec( "file.bat");その後、あなたは、たとえば、実行

の出力をキャプチャすることができ、2つのオプションがあります:

public static void main(String[] args) { 
    System.out.println("hello"); 
    try { 
     Process p = Runtime.getRuntime().exec("./prog.sh"); 
     InputStream in = p.getInputStream(); 

     System.out.println("OUTPUT"); 
     StringBuilder sb = new StringBuilder(); 
     int c; 
     while((c = in.read()) > 0) { 
      sb.append((char) c); 
     } 

     //here the script finished 
     String output = sb.toString(); 
     if(output.contains("Exception")) { 
      System.out.println("script failed"); 
     } 

     if(p.exitValue() == 0) { 
      System.out.println("The script run without errors"); 
     } else { 
      System.out.println("The script failed"); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

これは、あなたが出力をキャプチャして、スクリプトが正常に実行するかどうかを決定する必要があり、両方のシナリオを、キャプチャまたはスクリプトからの終了ステータスを使用できるかどうかを確認します。

exitValueコードは、成功の場合は0、失敗の場合はその他の数値です。

+0

この出力内の特定の文字列を検索できますか?そのコンソールで例外が発生し、適切な終了コードでコンソールが終了することがあります。プロセスは例外のために完了しませんでした。どうすればそれを処理できますか? –

+1

はい、上記の更新を確認してください – Augusto

+0

Windowsでは、完了するためにexec'dプロセスのstdout/stderrストリームを消費する必要があります。 – maerics

1

確かに、必要な数のコンソールを開くことができます。同時に実行する場合は、スレッドを別々に作成し、Runtime.exec()またはProcessBuilderを使用してプロセスを作成します。

しかし、なぜこれをやりたいのですか?このようなタスクに特化したビルドツールである古い古いものがあります。それはすべてをサポートし、カスタムタスクを使用して拡張可能です。

また、2011年になったことを突然思い出した場合は、Apache Buildrのような新しいツールを使用してください。

+0

ポインタありがとうございます。私は確かにホイールを再発明したくありません。それがプロジェクトで私を助けることができるなら、それを確かに調べるでしょう。問題は、プロジェクトがとても成熟しており、既に少なくとも10〜16のantスクリプトを使用していることです。それらは順番に、.batファイルによって実行されます。私はこれらのantスクリプトを処理するためにそれらの.batファイルを自動化することを考えています –

0

JavaのRuntimeクラスには、入出力ストリームとその他の管理に対するプログラム的なインターフェイスを持つProcessesを起動するメソッドがあります。しかし、親が死んだプロセスをWindowsがどのように処理するかはわかりません。

VBやJScriptを使用してWindows Script Hostを使用することを検討することをお勧めします。