Запуск Java-программы, связывающейся с проблемой третьей библиотеки (java -jar) (пробовали несколько методов) - PullRequest
1 голос
/ 10 ноября 2011

Эта проблема связана с запуском Java-программы (jar), зависящей от библиотеки jar третьей стороны, даже после установки classpath, и попыткой многих других методов, читая статьи в Интернете.

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

. Я безуспешно пробовал следующие альтернативы

  1. Установка java.class.path программно

    String class_path = args[0];
    System.setProperty("java.class.path",class_path);
    

    Здесь я предполагаю, что развертыватель будет указывать classpath в качестве первого аргумента при запуске программы

  2. Настройка CLASSPATH env_var для поиска каталога третьей стороны

  3. Во время работы с использованием опции classpath

    java -classpath /path/to/Pack1.jar -jar Pack2.jar 
    

    Я думаю, что это не будет работать, потому что в документации сказано, что classpath являетсяигнорируется, когда программа запускается с помощью «java -jar»

  4. Программная установка java.ext.dirs.

  5. Программная установка java.library.path.

Я не хочу указывать Class-Path в манифесте, потому что он принимает только относительный путь, и я не знаю, где будет храниться сторонняя библиотека в машине развертывания

Но яЯ не могу запустить банку.

Как я могу решить эту проблему, помогите, пожалуйста.

Ответы [ 3 ]

3 голосов
/ 10 ноября 2011

Перейдите к варианту 3. Поместите обе банки в путь к классам следующим образом:

java -classpath '/path/to/Pack1.jar:/path/to/Pack2.jar' com.packagename.yourclassname

Обратите внимание, что это для Linux.в Windows вы должны разделять элементы classpath точками с запятой:

java -classpath "/path/to/Pack1.jar;/path/to/Pack2.jar" com.packagename.yourclassname

http://en.wikipedia.org/wiki/Classpath_%28Java%29

0 голосов
/ 13 июня 2014

Назовите вторичные JAR в записи Class-path файла Manifest.MF основного файла JAR и используйте java -jar.

Ваше возражение против этого метода не имеет смысла.Если вы предоставляете и развертываете вторичные JAR-файлы, как и вы, у вас будет такой же уровень контроля над их расположением, как и у основного файла JAR.Неважно, где еще у пользователя могут быть их копии.

0 голосов
/ 10 ноября 2011

Вы можете использовать Pack2.jar, не запуская его, используя -jar - поместите его в путь к классам и вызовите точку входа, указанную в его файле манифеста.

Я обычно оборачиваю это в сценарий запуска, чтобы избежать подобных проблем, и разрешаю задавать пути jar с помощью аргумента.

...