2012-08-12 4 views
0

Netbeans에서 두 개의 Java 응용 프로그램을 개발 중이며 첫 번째 응용 프로그램에서 두 번째 응용 프로그램을 실행해야합니다. 나는이 다음 코드를 사용하여 수행종속성 자동 처리

ProcessBuilder pb = new ProcessBuilder("java", "Second App Main Class Name"); 
pb.start(); 

문제는 두 번째 응용 프로그램은 내가 넷빈즈에서 참조로 추가 종속성의 거대한 숫자를 가지고 있다는 것입니다. 하지만 위의 코드를 사용하여 실행하면 자바는 분명히 그 중 하나를 찾지 못합니다.

내 프로젝트가 많은 라이브러리를 사용하기 때문에 어떻게 든 Classpath을 자동으로 처리 할 수 ​​있습니까?

답변

1

글쎄, 문제는 두 번째 자바 애플리케이션 환경에서 classpath를 설정하지 않았기 때문에 메인 클래스를 당신은 말했습니다.) 다른 의존 관계는 발견되지 않습니다.

Maven 또는 Ant와 같은 것을 사용하더라도 별도의 클래스 경로가있는 두 개의 별도 Java 응용 프로그램을 작성하는 경우에도 (다른 하나의 클래스 경로에 대해 알고 있다면 다음과 같이 할 수 있습니다. 방법 두 번째 응용 프로그램에 적합한 JAR 및 클래스 파일을 찾을 수있는 ProcessBuilder를 알려주기 :

public int exec(Class<?> clazz) throws IOException, 
              InterruptedException { 
    String javaHome = System.getProperty("java.home"); 
    String javaBin = javaHome + 
      File.separator + "bin" + 
      File.separator + "java"; 

    /* This is where you want to set up your Classpath for the second app */ 
    String classpath = System.getProperty("java.class.path"); 
    String className = clazz.getCanonicalName(); 

    ProcessBuilder builder = new ProcessBuilder(
      javaBin, "-cp", classpath, className); 

    Process process = builder.start(); 
    process.waitFor(); 
    return process.exitValue(); 
} 

하지만 넷빈즈에서 응용 프로그램을 실행하는 이유를 질문 - assumedly 당신은 결국 명령 줄에서 모두 응용 프로그램을 실행해야합니다. 명령 줄에서 응용 프로그램을 시작할 수 없으면 Java에서 응용 프로그램을 시작할 수 없으며 ProcessBuilder는 시스템의 다른 프로그램에 대한 명령 행 시작 프로그램으로 동작합니다 .

0

새 프로세스를 생성하는 대신 두 번째 응용 프로그램의 main 메서드를 직접 실행합니다. 외부 프로세스 처리는 다소 복잡합니다 (특히 콘솔에서 읽는 경우).

+0

고마워, 그게 내가 정상적으로하는 일이지만, 현재 나는 인트라 프로세스 연결과 테제 종류의 것들을 테스트해야하고 나쁘게 붙어있다. ( – MBZ

0

Maven 또는 Ant와 같은 빌드 도구를 사용하고 도구에 따라 프로젝트를 Maven 또는 Ant 프로젝트로 가져올 수 있습니다. Maven은 전 이적 종속성을 잘 처리합니다. 이 링크를 통해 메이븐 문서를 확인하십시오 : http://maven.apache.org/