在正在运行的Java应用程序中运行jar存档

时间:2009-06-08 16:34:29

标签: java jar

我想在运行的Java应用程序中运行一个可运行的jar存档。 我需要能够从我的应用程序中控制正在运行的类(即停止,启动它们等)。

基本上我需要做“java -jar X.jar”的eqvilient。

我无法使用Runtime.getRuntime()。exec(“...”),因为jar文件将被编码,并且需要先解码它们。

2 个答案:

答案 0 :(得分:9)

以下是使用Main-Class从jar文件中提取JarFile的名称然后使用URLClassLoader从jar加载类然后调用static void 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"}});
    }
}

答案 1 :(得分:4)

'可执行文件夹'是一个简单的jar文件,其中清单有一个特殊属性,用于定义'主'类。

因此,您只需将可执行jar放在类路径上,识别'main'类并调用此类的静态main方法。