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

Java 如何在jar文件中执行jar文件,java,jar,Java,Jar,我有一个项目谁的结构不能改变。我要做的就是 我有一个包含directores的主jar文件 /classes /lib /main /manifest 我必须在执行主jar文件时调用Test1类。所以在清单文件中,我给出了主类的路径:path.to.file 我在包含实际应用程序的main文件夹中有另一个jar文件。如何在主文件夹中执行jar并执行清单文件中提到的Test2类 请给我一个解决方案或任何工作方向。非常感谢您的帮助。您不能在当前的类加载器中执行此操作,您需要一个新的类加载器 如果您

我有一个项目谁的结构不能改变。我要做的就是

我有一个包含directores的主jar文件

/classes
/lib
/main
/manifest
我必须在执行主jar文件时调用Test1类。所以在清单文件中,我给出了主类的路径:path.to.file

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


请给我一个解决方案或任何工作方向。非常感谢您的帮助。

您不能在当前的类加载器中执行此操作,您需要一个新的类加载器

如果您的jar名为
foobar.jar
,并且在类
test.abc.main
中有一个
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);
  • 如果您不介意使用GPLv3的代码来创建启动器类,那么可以使用JarClassLoader

  • 将主jar中的jar提取到临时位置,退出时执行并删除

  • 只需更改文件结构,因为您没有列出“不这样做”的任何原因,我不明白为什么不:D


  • 这里有一个链接可以帮助你回答你的问题@AdrianTotolici链接中的答案不能处理罐子中的罐子。