Java-我可以使用JarURLConnection执行jar类吗?

时间:2019-03-28 17:25:02

标签: java

我正在支持“ jar://” uri方案的环境中运行,并且我想使用JarURLConnection调用该jar中的任何函数。例如:

jar:file:/home/duke/duke.jar!/COM/foo/Main.class

oracle文档说:

  

JarURLConnection实例只能用于读取JAR文件。使用此类无法获得OutputStream来修改或写入基础JAR文件。

我的问题是:我可以单独使用jar://方案来运行代码吗?还是只阅读课程内容?

1 个答案:

答案 0 :(得分:1)

您不为此直接使用JarURLConnection。相反,您创建一个URLClassLoader并使用它来获取相关的类:

    Path jar = Paths.get("/home/duke/duke.jar");

    try {
        ClassLoader classLoader = new URLClassLoader(
            new URL[] { jar.toUri().toURL() });

        Class<?> mainClass = Class.forName("com.foo.Main", true, classLoader);
        mainClass.getMethod("main", String[].class).invoke(null, new String[0]);
    } catch (ReflectiveOperationException | MalformedURLException e) {
        throw new RuntimeException("Could not run " + jar, e);
    }

URLClassLoader在内部使用JarURLConnection,但您无需直接使用它。