我有一个项目的结构无法改变。我要做的是
我有一个主要的jar文件
/classes
/lib
/main
/manifest
当我执行主jar文件时,我必须调用Test1类。所以在清单文件中我给出了Main-Class的路径:path.to.file。
我在main
文件夹中有另一个包含实际应用程序的jar文件。如何在main文件夹中执行jar并执行Manifest文件中提到的Test2
类。
请给我一个解决方案或任何指导方向。任何帮助表示赞赏。
答案 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)
如果您可以使用GPLv3代码制作启动器类,则可以使用JarClassLoader http://www.jdotsoft.com/JarClassLoader.php。
将主jar内的jar解压缩到临时位置,退出时执行并删除
只需更改文件结构,因为您没有列出"没有这样做的任何原因",我不明白为什么不这样做。 :d