如何在jar文件中执行jar文件

时间:2014-11-04 13:41:26

标签: java jar

我有一个项目的结构无法改变。我要做的是

我有一个主要的jar文件

/classes
/lib
/main
/manifest

当我执行主jar文件时,我必须调用Test1类。所以在清单文件中我给出了Main-Class的路径:path.to.file。

我在main文件夹中有另一个包含实际应用程序的jar文件。如何在main文件夹中执行jar并执行Manifest文件中提到的Test2类。

请给我一个解决方案或任何指导方向。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

你不能在当前的ClassLoader中这样做,你需要一个新的。

如果您的jar名为foobar.jar并且您在课程main中有test.abc.Main - 方法,那么这可能会有效:

    URL[] urls={new URL("classloader:/main/foobar.jar")};
    ClassLoader parentClassLoader = this.getClass().getClassLoader();
    URLClassLoader childClassLoader=new URLClassLoader(urls,parentClassLoader);
    Class clazz = childClassLoader.loadClass("test.abc.Main");
    String[] arguments = new String[]{};
    clazz.getMethod("main", arguments.getClass()).invoke(null,arguments);

答案 1 :(得分:1)

  1. 如果您可以使用GPLv3代码制作启动器类,则可以使用JarClassLoader http://www.jdotsoft.com/JarClassLoader.php

  2. 将主jar内的jar解压缩到临时位置,退出时执行并删除

  3. 只需更改文件结构,因为您没有列出"没有这样做的任何原因",我不明白为什么不这样做。 :d