sitelink1 https://stackoverrun.com/ko/q/11418710 
sitelink2  
sitelink3  
sitelink4  
sitelink5  
sitelink6  

TFS의 witadmin.exe 프로그램을 사용하여 WIT 파일을 import 해야 할 일이 있었다

이를 위해서는 프로그램 수행시 몇가지 파라미터를 입력해야만 하는데 해당 작업을 자동으로 수행할 자바 프로그램을 작성해보았다

 

 

import java.io.*;
public class CmdExec {
  public static void main(String argv[]) {
      
    try {

      //Process p = Runtime.getRuntime().exec("D:\\w.bat"); //배치로 만들어서 실행시

 

      String[] command = new String[] {
          "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\Common7\\IDE\\witadmin.exe"
      , "importwitd"
      , "/collection:http://도메인:포트번호/tfs/컬렉션명"
      , "/p:프로젝트명"
      , "/f:\"D:\\RequestProduct.xml\""};
      
      Process p = Runtime.getRuntime().exec(command); //명령 실행


      BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
      String line = null;
      while ((line = br.readLine()) != null) {
          System.out.println(line); //실행 결과 출력
      }
      
      //p.waitFor(); <- subprocess까지 종료할때까지 기다리다가 hang이 걸리는 경우가 있었다 그래서 아래와 같이 timeout을 걸어준다

      if (!p.waitFor(3, TimeUnit.SECONDS)) {

          System.out.println("Destroy");

          p.destroy();

      }

    } catch (Exception err) {
      err.printStackTrace();
    }
  }
}

 

잘 동작한다 ^^;

 

참고로 콘솔 명령어 사이의 공백은 command 배열 변수에 저장시 콤마로 구분해야 한다

예를 들어, "witadmin.exe importwitd" 명령어를 command 배열 변수에 담는다면

  String[] command = {"witadmin.exe", "importwitd"};

이런식이어야 한다

 

String[] command = {"witadmin.exe importwitd"}; 식으로 코딩해서 실행하면 아무런 동작을 하지 않는다

오류 출력도 없어서 뭐가 문제인지 혼란스러울 수 있으므로 제일 먼저 명령어 공백을 처리했는지 확인해야 한다