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"}; 식으로 코딩해서 실행하면 아무런 동작을 하지 않는다
오류 출력도 없어서 뭐가 문제인지 혼란스러울 수 있으므로 제일 먼저 명령어 공백을 처리했는지 확인해야 한다
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
5 | [java.lang.ProcessBuilder] “매개변수가 틀립니다” 혹은 ”Cannot run program” | 황제낙엽 | 2021.10.15 | 541 |
4 | 특정 경로에서 쉘 명령어 실행하기 (ProcessBuilder) | 황제낙엽 | 2021.10.08 | 408 |
3 | Runtime 클래스의 exec() 함수 실행시의 실행 결과 수집 | 황제낙엽 | 2020.03.26 | 359 |
» | Runtime 클래스를 이용한 윈도우 프로그램 실행 예제 | 황제낙엽 | 2017.08.01 | 413 |
1 | OS 쉘 명령어(shell script) 실행하기 [ProcessBuilder, Runtime.getRuntime().exec()] | 황제낙엽 | 2012.02.22 | 923 |