Как добавить нативную библиотеку в «java.library.path» с запуском Eclipse (вместо переопределения) - PullRequest
88 голосов
/ 19 марта 2009

Я получил собственную библиотеку, которую нужно добавить в java.library.path . С аргументом JVM -Djava.library.path = путь ... я могу установить путь так, как хочу.

Моя проблема в том, что моя другая библиотека (отчеты из Пентаго) ищет шрифты на основе java.library.path по умолчанию (включая системные каталоги и т. Д.), А ручная настройка переопределяет путь по умолчанию.

Итак: как я могу добавить запись пути к java.library.path по умолчанию вместо того, чтобы переопределять ее (что, кажется, делается с -Djava.library.path)? (Я бы не хотел добавлять путь по умолчанию вручную, что было бы неправильно для развертывания)

РЕДАКТИРОВАТЬ: Извините за отсутствующие детали; Я работаю с Eclipse. (Развертывание выполняется с помощью JNLP, и там я могу использовать nativelib в разделе resources )

Ответы [ 13 ]

46 голосов
/ 22 февраля 2010

Я забыл эту проблему ... На самом деле я спрашивал с Eclipse, извините, что не сказал это изначально И ответ кажется слишком простым (по крайней мере, с 3.5; возможно, с более старыми версиями):

Аргументы конфигурации запуска Java: Аргументы виртуальной машины:

-Djava.library.path="${workspace_loc:project}\lib;${env_var:PATH}"

Не следует забывать кавычки, в противном случае в PATH возникают проблемы с пробелами.

14 голосов
/ 24 января 2010

Если вы хотите добавить собственную библиотеку, не вмешиваясь в java.library.path во время разработки в Eclipse (чтобы избежать включения абсолютных путей и необходимости добавления параметров в конфигурацию запуска), вы можете указать путь к расположению собственных библиотек для каждый Jar в Java Build Path в разделе Собственное расположение библиотеки . Обратите внимание, что имя файла собственной библиотеки должно соответствовать имени файла Jar. Смотрите также это подробное описание .

9 голосов
/ 19 марта 2009

SWT помещает необходимые собственные DLL в JAR. Найдите для примера "org.eclipse.swt.win32.win32.x86_3.4.1.v3449c.jar".

Библиотеки DLL должны находиться в корне JAR, JAR должен быть подписан, и DLL должна появиться с контрольной суммой в META-INF / MANIFEST.MF, чтобы виртуальная машина могла их забрать.

3 голосов
/ 24 апреля 2009

В Windows вот так:

-Djava.library.path = "C: / MyLibPath;% PATH%"

% PATH% - это ваш старый -Djava.library.path

2 голосов
/ 21 февраля 2014

https://bugs.eclipse.org/bugs/show_bug.cgi?id=102239 утверждает, что в модуле запуска Eclipse не реализована механика замещения, по крайней мере, до выпуска Juno.

Таким образом, (почти) невозможно добавить или добавить другую папку библиотеки в java.library.path при запуске Eclipse без предварительного знания настроек по умолчанию.

Я почти написал, потому что должна быть возможность запустить Eclipse, сбросить содержимое java.library.path и остановить Eclipse в одной команде. Дамп будет проанализирован и затем принят как вход для запуска Eclipse, то есть

#!/bin/bash
# get default value of java.library.path (somehow)
default_lib_path=$( start_dump_stop_eclipse_somehow )  

# now launch Eclipse
eclipse --launcher.appendVmargs \
         -vmargs \
         -Djava.library.path="/my/native/lib/folder:${default_lib_path}"
1 голос
/ 15 июля 2014

Решение, предложенное Робом Элснером в одном из приведенных выше комментариев, работает отлично (OSX 10.9, Eclipse Kepler). Нужно добавить их дополнительные пути к разделенным ":".

Вы также можете использовать $ {system_property: java.library.path} - Роб Элснер 22 ноября 2010 года в 23: 01

1 голос
/ 26 ноября 2010

Окно-> Настройки-> Java-> Установленные JRE. Затем выберите текущий JRE (JDK) и нажмите «Изменить». Заполните стандартные аргументы виртуальной машины: -Djava.library.path = / usr / local / xuggler / lib. Готово!

1 голос
/ 09 сентября 2009

В системах UNIX вы можете добавить переменную среды LD_LIBRARY_PATH. В Windows JVM автоматически устанавливает системное свойство java.library.path в значение PATH; так что если dll находится на вашем PATH, то вы настроены.

1 голос
/ 19 марта 2009

Можете ли вы обойти это, вызвав System.load () программно для загрузки своей нативной библиотеки? Этот метод (в отличие от System.loadLibrary () ) позволяет указать абсолютный путь.

0 голосов
/ 27 марта 2014

Многие из существующих ответов предполагают, что вы хотите установить это для конкретного проекта, но мне нужно было установить его для самого Eclipse , чтобы поддерживать встроенную аутентификацию для драйвера JDBC для SQL Server.

Для этого я следовал этим инструкциям для запуска Eclipse из командной строки Java вместо его обычного средства запуска. Затем я просто изменил этот сценарий, добавив аргумент -Djava.library.path в командную строку Java.

...