2014-11-04 3 views
1

У меня есть проект, структура которого не может быть изменена. Что я должен делать то, чтоКак выполнить файл jar в файле jar

У меня есть основной файл фляги, которые имеют directores

/classes 
/lib 
/main 
/manifest 

Я должен вызвать класс Test1, когда я выполнить основной файл JAR. поэтому в файле манифеста я дал путь к файлу Main-Class: path.to.file.

У меня есть другой файл jar внутри папки main, содержащей фактическое приложение. Что я могу сделать, чтобы выполнить банку в основной папке и выполнить ее класс Test2, упомянутый в файле манифеста.

Пожалуйста, дайте мне решение или любое направление для работы. Любая помощь оценивается.

+0

Вот ссылка, которая может помочь вам в вашем вопросе http://stackoverflow.com/questions/1320476/execute-another-jar-in-a-java-program –

+0

@ AdrianTotolici Ответы в вашей ссылке не обрабатывают банки в баночках. –

ответ

1

Вы не можете сделать это в текущем ClassLoader, вам нужно новое.

Если баночка с именем 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. Вы можете использовать JarClassLoader http://www.jdotsoft.com/JarClassLoader.php, если вы хорошо с помощью GPLv3'd кода сделать класс запуска.

  2. Экстракт баночки внутри основного кувшина на временную папку, выполнить и удалить при выходе из

  3. Просто изменить структуру файла, так как вы не указали никаких причин «не делать этого», я не понимаю, почему нет. : D