다른 Java 프로그램에서 Java 프로그램을 컴파일하고 실행하는 방법
다른 Java 프로그램에서 Java 프로그램을 컴파일하고 실행할 수 있는지 생각해 본 적이 있습니까? Runtime.exec(String cmd)
를 사용하여 기본 운영 체제에 명령을 내릴 수 있습니다. 동일한 접근 방식을 사용하여 다른 Java 프로그램에서 Java 프로그램을 컴파일하고 실행합니다.
다른 Java 프로그램에서 Java 프로그램 컴파일 및 실행
다른 자바 프로그램에서 컴파일되고 실행될 간단한 자바 프로그램을 작성해 봅시다.
package com.journaldev.files;
public class Test {
public static void main(String[] args) {
System.out.println("Start");
for(String str : args){
System.out.println(str);
}
}
}
다음은 테스트 클래스를 컴파일하고 실행하는 다른 프로그램입니다.
package com.journaldev.files;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
public class CompileRunJavaProgram {
public static void main(String[] args) {
try {
runProcess("pwd");
System.out.println("**********");
runProcess("javac -cp src src/com/journaldev/files/Test.java");
System.out.println("**********");
runProcess("java -cp src com/journaldev/files/Test Hi Pankaj");
} catch (Exception e) {
e.printStackTrace();
}
}
private static void printLines(String cmd, InputStream ins) throws Exception {
String line = null;
BufferedReader in = new BufferedReader(
new InputStreamReader(ins));
while ((line = in.readLine()) != null) {
System.out.println(cmd + " " + line);
}
}
private static void runProcess(String command) throws Exception {
Process pro = Runtime.getRuntime().exec(command);
printLines(command + " stdout:", pro.getInputStream());
printLines(command + " stderr:", pro.getErrorStream());
pro.waitFor();
System.out.println(command + " exitValue() " + pro.exitValue());
}
}
javac
및 java
명령의 차이점에 주목하십시오. Eclipse 작업 디렉토리가 프로젝트 루트 디렉토리이지만 내 클래스 소스 디렉토리는 src이기 때문에 이 작업을 수행해야 합니다. Eclipse에서 위의 프로그램을 실행하면 다음과 같은 출력이 생성됩니다.
pwd stdout: /Users/pankaj/Documents/eclipse-workspace/JavaExceptions
pwd exitValue() 0
**********
Path Serapartor = /
javac -cp src src/com/journaldev/files/Test.java exitValue() 0
**********
java -cp src com/journaldev/files/Test Hi Pankaj stdout: Start
java -cp src com/journaldev/files/Test Hi Pankaj stdout: Hi
java -cp src com/journaldev/files/Test Hi Pankaj stdout: Pankaj
java -cp src com/journaldev/files/Test Hi Pankaj exitValue() 0
pankaj:~ pankaj$ cd /Users/pankaj/Documents/eclipse-workspace/JavaExceptions
pankaj:JavaExceptions pankaj$ javac -cp src src/com/journaldev/files/Test.java
pankaj:JavaExceptions pankaj$ javac -cp src src/com/journaldev/files/CompileRunJavaProgram.java
pankaj:JavaExceptions pankaj$ java -cp src com/journaldev/files/CompileRunJavaProgram
pwd stdout: /Users/pankaj/Documents/eclipse-workspace/JavaExceptions
pwd exitValue() 0
**********
javac -cp src src/com/journaldev/files/Test.java exitValue() 0
**********
java -cp src com/journaldev/files/Test Hi Pankaj stdout: Start
java -cp src com/journaldev/files/Test Hi Pankaj stdout: Hi
java -cp src com/journaldev/files/Test Hi Pankaj stdout: Pankaj
java -cp src com/journaldev/files/Test Hi Pankaj exitValue() 0
pankaj:JavaExceptions pankaj$
public static void main(String[] args) {
try {
if(args.length < 2) throw new Exception("Mandatory Arguments missing");
runProcess(args[0]);
runProcess(args[1]);
} catch (Exception e) {
e.printStackTrace();
}
}
시스템 getProperty 메서드 System.getProperty(\file.separator\)
를 사용할 수도 있습니다. 위의 프로그램은 시스템 독립적인 코드를 위해 아래와 같이 변경될 수 있습니다.
String separator = File.separator;
System.out.println("File Serapartor = "+separator);
separator = System.getProperty("file.separator");
System.out.println("File Serapartor = "+separator);
runProcess("javac -cp src src"+separator+"com"+separator+"journaldev"+separator+"files"+separator+"Test.java");
System.out.println("**********");
runProcess("java -cp src com"+separator+"journaldev"+separator+"files"+separator+"Test Hi Pankaj");
위와 같은 출력을 얻을 수 있습니다. Runtime exec 메서드를 사용하여 다른 Java 프로그램에서 Java 프로그램을 컴파일하고 실행하기 위한 것입니다. printLines() 및 runProcess() 메서드는 이 게시물에서 가져옵니다.