Объединение зависимостей JAR с исполняемым JAR (убер JAR) из командной строки

Я пытаюсь создать исполняемый файл 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 или другие инструменты. Но, пожалуйста, просто пошутите меня :)

5
задан onlyteo 25 July 2011 в 14:27
поделиться