Я пытаюсь создать исполняемый файл из командной строки. Основной класс в 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 теперь:
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 внутри него?
Я знаю, что вы спросите: «Почему он пытается сделать это таким образом?». Я знаю, что в основном для этого используются Eclipse, Ant, Maven или другие инструменты. Но, пожалуйста, просто позабавьте меня:)