2014-11-04 106 views
1

我有一个项目的结构不能改变。我所要做的就是如何在jar文件中执行jar文件

我有directores

/classes 
/lib 
/main 
/manifest 

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

我在包含实际应用程序的main文件夹中有另一个jar文件。我能做些什么来执行主文件夹中的jar并执行Manifest文件中提到的Test2类。

请给我一个解决方案或任何方向来工作。任何帮助赞赏。

+0

这里是一个链接,可以帮助你在你的问题 http://stackoverflow.com/questions/1320476/execute-another-jar-in-a-java-program – 2014-11-04 13:47:42

+0

@ AdrianTotolici链接中的答案不能处理罐子中的罐子。 – 2014-11-04 13:53:22

回答

1

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

如果你的罐子命名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); 
1
  1. 你可以使用的JarClassLoader http://www.jdotsoft.com/JarClassLoader.php如果你没事使用GPLv3'd代码做一个发射器班。

  2. 提取物的主要罐子到一个临时位置里面的罐子,执行和退出时删除

  3. 只需更改文件结构,因为你还没有上市以任何理由“不这样做”,我不明白为什么不。 :d