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

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

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

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

EDIT: Извините за отсутствующие данные; Я работаю с Eclipse. (Развертывание выполняется с помощью JNLP и там я могу использовать nativelib под ресурсами)

Ответ 1

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

Конфигурация запуска Java Аргументы: аргументы VM:

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

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

Ответ 2

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

Ответ 3

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

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

Ответ 4

В Windows, например:

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

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

Ответ 5

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}"

Ответ 6

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

Ответ 7

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

Ответ 8

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

Вы также можете использовать ${system_property: java.library.path} - Rob Elsner Ноя 22 '10 в 23:01

Ответ 9

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

Ответ 10

Имя файла родной библиотеки должно соответствовать имени файла Jar. Это очень важно. Убедитесь, что имя jar и имя dll совпадают. Также, пожалуйста, см. Сообщение от Fabian Steeg Моя загрузка для jawin содержала разные имена для dll и jar. Это jawin.jar и jawin d.dll, обратите внимание на добавление 'd' в имя dll файла. Я просто переименовал его в jawin.dll и установил его как родную библиотеку в eclipse, как упоминалось в сообщении " http://www.eclipsezone.com/eclipse/forums/t49342.html"

Ответ 11

По какой-то причине я не мог заставить работать несколько папок (ну, на какое-то время, но как только мне понадобилось больше dll и добавлено больше папок, ни один с пробелами в пути). Затем я скопировал все необходимые DLL файлы в одну папку и получил это как мой java.library.path, и он сработал. У меня нет объяснений - если кто-нибудь это сделает, было бы здорово.

Ответ 12

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

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

Ответ 13

В Windows я обнаружил, что важно запустить Eclipse из командной строки, а не из меню "Пуск" или ярлыка при условии, что родная DLL находится в каталоге вашего PATH, По-видимому, это гарантирует, что соответствующий каталог находится на пути.