Я пытаюсь создать исполняемый файл jar из командной строки. Главный класс в JAR имеет зависимости, которые я упаковал в другой простой файл JAR.
Я хочу упаковать JAR зависимостей вместе с исполняемым JAR, чтобы иметь один файл JAR для отправки.
Что у меня есть до сих пор пробовал следующее:
Файл зависимостей Hello.class имеет фиктивный код:
public class Hello {
public String getHello() {
return "Well hello there!!";
}
}
Я упаковал файл класса в hello.jar, используя:
jar cvfM hello.jar Hello.class
Содержимое hello.jar - это now:
hello.jar -+- Hello.class
Теперь у меня есть основной класс с имитацией кода:
public class Main {
public static void main(String[] args) {
System.out.println(new Hello().getHello());
}
}
Затем я создаю файл манифеста manifest.txt со следующим содержанием:
Main-Class: Main
Class-Path: hello.jar
Теперь я создаю исполняемый JAR, используя:
jar cvfm main.jar manifest.txt Main.class hello.jar
Теперь содержимое main.jar выглядит следующим образом:
main.jar -+- Main.class
|
+- hello.jar
|
+- META-INF -+- MANIFEST.MF
Запуск исполняемого JAR с использованием:
java -jar main.jar
Я получаю ошибку загрузчика классов для зависимости класса Hello . Я понимаю, что это происходит потому, что загрузчик классов ищет hello.jar по тому же пути, что и main.jar . Поэтому, когда я помещаю копию hello.jar вместе с main.jar , я могу запустить его.
Что мне нужно сделать, чтобы запустить main.jar с hello.jar внутри?
Я знаю, что вы спросите: «Почему он пытается сделать это таким образом?». Я знаю, что ppl в основном использует для этого Eclipse, Ant, Maven или другие инструменты. Но, пожалуйста, просто пошутите меня :)