2016-06-28 2 views
1

Eclipse에 Maven 프로젝트 인 A라는 기존 웹 응용 프로그램이 있습니다. Tomcat 8 localhost 서버에서 실행됩니다. 이제는 Java 응용 프로그램 B가 있습니다.이 응용 프로그램은 자체적으로 별도의 프로젝트였습니다. B를 내 작업 공간에 A를 다른 프로젝트로 가져 왔습니다. 나는이 내 클래스는 다음과 같습니다 A. 내에서 클래스 B에 존재하는 (App.java라는) 주 클래스를 실행하려고 : 나는를 실행했을 때Eclipse에서 Maven 프로젝트 내에서 Java 애플리케이션을 컴파일하고 실행하는 방법은 무엇입니까?

public void runOrgReportUtility() throws IOException { 
    int k = runProcess("javac /Users/ag/utilities/org-report-utility/src/main/java/com/vs/orgreport/App.java", null); 
    if (k==0) { 
     log.info("Compiled. Now trying to run class."); 
     String commandStr = "java -cp /Users/ag/utilities/org-report-utility/src/main/java/com/vs/orgreport/ App"; 
     log.info("Command String: "); 
     log.info(commandStr); 
     runProcess(commandStr); 
} 

public int runProcess(String command, String[]) throws Exception { 
    Process pro = Runtime.getRuntime().exec(command); 
    pro.waitFor(); 
    return pro.exitValue(); 
    } 

는 콘솔 나에게 error: cannot find symbol의 무리를 준 B 내의 다양한 클래스에 대해. App.java 만 컴파일되고 실행 중이며 B의 다른 종속 클래스가 아니라는 것을 알게되었습니다.

원본을 시작할 때 두 번째 Java 응용 프로그램을 컴파일하고 실행할 수있는 방법 웹 응용 프로그램?

것들 나는 시도했다 :

  • 세트 (원본) 프로젝트 참조를 보조 자바 응용 프로그램을 포함하는
  • 원래 프로젝트
  • 을의 (프로젝트 탭) Java 빌드 경로에 자바 응용 프로그램 프로젝트를 추가 원래 프로젝트의 배포 어셈블리에 Java 응용 프로그램을 추가했습니다.

답변

2

응용 프로그램을 호출 할 때 컴파일하지 마십시오. 이것은 나쁜 것입니다 :

  1. 모든 종속성 때문에 javac로 컴파일하기가 어렵습니다. 당신이 알았 듯이, 하나의 java 파일에 javac을 호출하는 것은 간단한 문제가 아닙니다.
  2. 컴파일을 계속하는 동안 오류가 있음을 알기 위해 실행을 시도 할 때까지 기다리는 이유는 무엇입니까?
  3. 왜 컴파일 할 때마다 오버 헤드가 발생합니까?

당신은 일반적으로 B를 컴파일하고 아마 B와 모든 종속성 (일명 "지방"항아리)를 포함하는 b.JAR가를 만들 받는다는 그늘 - 플러그인을 사용 받는다는을 사용합니다. 그런 다음 A가 B를 호출 할 때 포함 된 응용 프로그램을 호출 할 때 fat jar를 클래스 경로로 사용할 수 있습니다. 당신이 고려할 수

다른 것들 : 당신이 당신의 웹 응용 프로그램에 대해 순서대로 자리에 있어야 외부 항아리를 가지고에 의존되지 않도록

  1. 는 또한 웹 응용 프로그램에서 지방 항아리를 포함 아마도 수 완전히 기능적이다.
  2. 별도의 프로세스에서 다른 응용 프로그램을 실행하는 대신 App.main()을 직접 호출하여 동일한 JVM에서 실행하십시오. 별도의 스레드에서 실행하는 것이 좋을 수도 있습니다.
  3. 별도의 OS 프로세스를 원하면 Runtime.exec 대신 ProcessBuilder을 사용하십시오. 대부분의 경우, 사용하기 쉽고 올바른 API입니다.
+0

감사합니다. 나는 당신의 제안에 따라 갔고 B를 jar 파일로 컴파일했습니다. 그런 다음 jar 파일을 라이브러리로 java 빌드 경로에 추가하고 App.main()을 사용하여 실행할 수있었습니다. –

관련 문제