실행중인 Java 응용 프로그램 내에서 실행 가능한 jar 아카이브를 실행하려고합니다. 내 애플리케이션에서 실행중인 클래스를 제어 할 수 있어야합니다 (예 : 중지, 시작 등).실행중인 Java 응용 프로그램에서 jar 아카이브 실행
기본적으로 "java -jar X.jar"의 평형을 수행해야합니다.
jar 파일을 인코딩 할 때 Runtime.getRuntime(). exec ("...")을 사용할 수 없으므로 먼저 디코딩해야합니다.
실행중인 Java 응용 프로그램 내에서 실행 가능한 jar 아카이브를 실행하려고합니다. 내 애플리케이션에서 실행중인 클래스를 제어 할 수 있어야합니다 (예 : 중지, 시작 등).실행중인 Java 응용 프로그램에서 jar 아카이브 실행
기본적으로 "java -jar X.jar"의 평형을 수행해야합니다.
jar 파일을 인코딩 할 때 Runtime.getRuntime(). exec ("...")을 사용할 수 없으므로 먼저 디코딩해야합니다.
'실행 파일 Jar'는 매니페스트가 'the'메인 클래스를 정의하는 특별한 속성을 가지고있는 간단한 jar 파일입니다.
클래스 패스에 실행 파일을 놓고 'main'클래스를 식별하고이 클래스의 정적 main 메소드를 호출하면됩니다.
package test;
import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.jar.Attributes;
import java.util.jar.JarFile;
public class JarRunner {
public static void main(String[] args) throws Exception{
File jar = new File(args[0]);
URLClassLoader classLoader = new URLClassLoader(
new URL[]{jar.toURL()}
);
JarFile jarFile = new JarFile(jar);
Attributes attribs = jarFile.getManifest().getMainAttributes();
String mainClass = attribs.getValue("Main-Class");
Class<?> clazz = classLoader.loadClass(mainClass);
Method main = clazz.getMethod("main", String[].class);
main.invoke(null, new Object[]{new String[]{"arg0", "arg1"}});
}
}
JarFile
은 다음
URLClassLoader
를 사용하여 항아리에서 클래스를로드 한 후 반사를 사용하여
static void main
를 호출하여 jar 파일에서
Main-Class
의 이름을 당기의 예 클래스를 동적으로로드하려면 ClassLoader 또는 URLClassLoader.newInstance를 사용하십시오.
+1은 Classloader, JarFile 및 리플렉션을위한 훌륭한 데모입니다. 그러나 New to Java 인 모든 사람들은 target main mathod가 인수 'arg0'과 'arg1'로 호출된다는 것을 알아야합니다. 실제 구현에서는 이러한 문자열을 실제 인수로 대체해야합니다. –
클래스 경로에 "주 클래스"가있는 경우에는 "URLClassLoader classLoader = new URLClassLoader (새 URL [] {jar.toURL(), null});"라는 사소한 수정이 필요합니다. 이렇게하면 현재 클래스 로더에 대한 위임을 방지 할 수 있으므로 JAR 파일의 종속 클래스가로드되지 않을 수 있습니다. – plinehan
하는 사용자 지정을 사용할 수 있습니다 : 여기 –