Как я могу указать зависимости в файле манифеста и затем включить его в мой файл .jar? - PullRequest
3 голосов
/ 07 апреля 2010

Я сгенерировал файлы .class с помощью следующей команды:

javac -cp \directoryName\external.jar myPackageDirectory\First.java myPackageDirectory\Second.java

Мне нужно было использовать -cp во время компиляции и имя файла .jar «внешней» библиотеки (external.jar), чтобы иметь возможность использовать эту библиотеку из моего кода.


Используя мои файлы .class, я сгенерировал свой файл .jar следующим образом:

jar cfm app.jar manifest.txt myPackageDirectory\*.class

manifest.txt содержит только одну строку:

Main-Class: myPackageName.First

Моя проблема в том, что я не уверен, что смогу запустить файл .jar на других компьютерах. Я так думаю, потому что во время компиляции я указал местоположение файла .jar файла. внешняя библиотека. Итак, мои файлы .class (включенные в файл .jar будут пытаться найти файл .jar внешней библиотеки в определенном каталоге, и нет никакой гарантии, что файл .jar внешней библиотеки будет находиться в том же каталоге как на моем компьютере.


Я слышал, что вышеуказанную проблему можно решить с помощью

использование файла MANIFEST, который я включить в мою банку, и которая будет список зависимостей

но я не понимаю, как это работает. Мне нужно указать местоположение «external.jar» на этапе компиляции (в противном случае компилятор жалуется).

Ответы [ 2 ]

2 голосов
/ 07 апреля 2010

Прежде всего: вы, кажется, не компилируете класс с именем MainClass, и все ваши файлы .java находятся в пакете, поэтому я предполагаю, что MainClass - это просто заполнитель, и вы на самом деле используете правильный имя класса здесь.

Вам нужно указать Class-Path заголовок , в котором упоминается ваш внешний файл .jar, в ваш manifest.txt и доставить файл .jar вместе с вашим файлом jar. Вы должны сделать это в дополнение к указанию -cp во время компиляции.

0 голосов
/ 07 апреля 2010

В дополнение к тому, что говорит Йоахим Зауэр (очень правильно), есть способ упаковать ваши jar-файлы зависимостей в тот же jar, что и ваш собственный код. Программы, которые выполняют это, создают супер-главный класс и управляют путем к классам, чтобы найти зависимые jar-файлы в полученном jar-файле.

Несколько программ могут сделать это; один из них называется OneJar .

...