Для моей текущей работы мне нужно было предоставить исполняемый jar-файл, который мог бы загружать jar-файлы внутри себя и выполнять второй main (). В основном это bootstrap main () и приложение main ().
Шаг 1. в манифесте "main-class" вы помещаете свой класс начальной загрузки.
Шаг 2. Когда ваш класс начальной загрузки запускает, он отключает собственный jar-файл и все jar-файлы внутри него во временный каталог. Используйте что-то вроде строки ниже, чтобы получить собственную банку.
Main.class.getProtectionDomain().getCodeSource().getLocation().toURI()
Шаг 3. Класс начальной загрузки определяет ОС через свойство «os.name» и загружает соответствующие jar-файлы из временного каталога с этим
private static void loadJarIntoClassloader( URL u ) throws Exception
{
URLClassLoader sysLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
Class<URLClassLoader> sysclass = URLClassLoader.class;
Method method = sysclass.getDeclaredMethod("addURL", URL.class);
method.setAccessible(true);
method.invoke(sysLoader, new Object[]{u});
}
Шаг 4. Теперь вы можете запустить свое приложение, вызвав приложение main ().
ПРИМЕЧАНИЕ. Этот небольшой прием зависит от вашей JVM, использующей URLClassLoader
в качестве SystemClassLoader, что верно для JVM Sun, а не для других.
Таким образом, вы можете доставить только одну банку, и она сама распакуется и запустится с правильными банками.
person
karoberts
schedule
11.01.2010