2011-02-08 3 views
0

빌드 프로세스를 자동화하기 위해 Java로 유틸리티를 만들고 싶습니다. 현재 프로세스가 포함됩니다.여러 .bat 파일 프로세스를 자동화하기위한 지침이 필요합니다.

  • 서버용 2 개의 콘솔을 엽니 다. (Java 프로그램에서이 콘솔을 열려고합니다.)
  • 콘솔에서 여러 bat 파일을 실행하고 하나의 배치 파일 출력을 기반으로 다른 명령을 실행합니다.

필자는 어떤 라이브러리를 사용해야할까요? 자바 (독립적으로)에서 2 개의 콘솔을 열 수 있습니까? 마치 내 프로그램이 콘솔을 닫아도 계속 실행됩니다. (콘솔은 bea 서버, startWebLogic.cmd).

답변

1

Alee, 네, Runtime.getRuntime(). exec ("file.bat");로 할 수 있습니다. 그리고 당신은 당신이 실행 예를 들어

의 출력을 캡처 할 수 있습니다,이 옵션을 사용할 수 있습니다

이 당신이 출력을 캡처하고 스크립트가 성공적으로 실행 여부를 한 후 결정해야 두 시나리오를 캡처
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 개의 개미 스크립트를 사용하고 있다는 것입니다. 그 순서는 .bat 파일에 의해 실행됩니다. 그 개미 스크립트를 처리하기 위해 .bat 파일을 자동화하려고합니다. –

0

Java의 Runtime 클래스에는 입/출력 스트림 및 기타 관리에 프로그래밍 방식의 인터페이스가있는 Processes을 시작하는 메소드가 있습니다. 그러나 부모가 사망 한 프로세스를 Windows가 어떻게 처리하는지 잘 모르겠습니다.

또한 VB 또는 JScript를 통해 Windows Script Host을 사용하는 것이 좋습니다. 아마도 더 세밀하게 제어 할 수 있습니다.

관련 문제