Як додати власну бібліотеку до “java.library.path” із запуском Eclipse (замість того, щоб замінити його)


91

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

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

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

EDIT: Вибачте за відсутні деталі; Я працюю з Eclipse. (Розгортання здійснюється за допомогою JNLP, і там я можу використовувати nativelib під ресурсами )


1
будь ласка см обслуговується відповідь на це питання , а не - для мене це набагато краще: stackoverflow.com/questions/957700 / ...
laher

Питання "як додати рідну бібліотеку до .." бентежить. Ймовірно, йдеться про додавання (додавання або попереднє додавання) іншого "шляху до бібліотеки", тобто припускаючи, що Eclipse показує щось на зразок java.library.path = path1: path2: path3 за замовчуванням, питання полягає в тому, як запустити Eclipse, що закінчується в java.library .path = my / lib / folder: path1: path2: path3
whaefelinger

Відповіді:


46

Забув цю проблему ... Я насправді запитував із Eclipse, вибачте, що не заявив про це спочатку. І відповідь здається занадто простою (принаймні з 3,5; можливо, і зі старими версіями):

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

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

Не можна забувати про лапки, інакше в PATH виникають проблеми з пробілами.


7
Якщо є дві спільні бібліотеки, одна залежна від іншої, це не буде працювати. Перший знаходить час виконання Java, але другий вирішує системний динамічний завантажувач. Єдине рішення, яке я знайшов, - це встановити LD_LIBRARY_PATH.
kevin cline

4
Відповідь, надана @Touko, не відповідає початковому питанню, яке стосується додавання або попереднього додавання папки рідної бібліотеки. Принаймні в Mac OS 10.8 ні $ PATH, ні $ LD_LIBRARY_PATH, ні $ {workspace_loc: project} \ lib не мають нічого спільного зі значенням за замовчуванням. Наприклад, на моєму Mac значенням за замовчуванням є $ HOME / Library / Java / Extensions: / Library / Java / Extensions: / Network / Library / Java / Extensions: / System / Library / Java / Extensions: / usr / lib / java :.
whaefelinger

Якщо ви використовуєте TestNG в Eclipse, вам потрібно буде відредагувати конфігурацію запуску TestNG: - У вікні Запуск конфігурацій виберіть свою цільову конфігурацію TestNG. - Виберіть вкладку Навколишнє середовище - Додайте змінну PATH та встановіть її значення як цільову - Залиште перемикачем "Додавати середовище до рідного середовища" за замовчуванням.
Філіпп

Чи можу я отримати приклад.
basickarl

@kevincline, не могли б Ви пояснити, чому саме це не буде працювати в такому випадку? Я щойно зіткнувся з цією проблемою і намагаюся зрозуміти, що не так із цим рішенням.
анула

14

Якщо ви хочете додати власну бібліотеку, не втручаючись java.library.pathпід час розробки в Eclipse (щоб уникнути включення абсолютних шляхів і необхідності додавати параметри до конфігурації запуску), ви можете надати шлях до розташування рідних бібліотек для кожного Jar у Java Build Діалогове вікно шляху під місцем розташування рідної бібліотеки . Зауважте, що ім'я власного файлу бібліотеки має відповідати імені файлу Jar. Дивіться також цей детальний опис .


3
-1. Ви припускаєте, що кінцевий користувач запускає програму з IDE, що малоймовірно.
finnw

@finnw Я бачу вашу думку. Я знайшов питання, що шукає рішення про те, як додати власну бібліотеку в IDE під час розробки, не переоцінюючи, java.library.pathі повернувся після пошуку рішення в іншому місці. Відредагую мою відповідь, щоб зробити це зрозумілішим.
Fabian Steeg

Насправді я працюю з Eclipse, хоча я про це не згадував.
Touko

Це насправді не працює в поточній версії Eclipse (Luna), оскільки встановлення властивості замінює java.library.path, як описує користувач як проблему у питанні.
Алекс Н.

9

SWT розміщує необхідні власні бібліотеки DLL у JAR. Шукайте для прикладу "org.eclipse.swt.win32.win32.x86_3.4.1.v3449c.jar".

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


2
Як я можу це зробити за допомогою NetBeans?
Maciek Sawicki

AFAIK, NetBeans використовує Ant для побудови проекту. Прочитайте документацію для Ant про те, як створювати підписані JAR-файли та як розміщувати такі речі, як DLL, у маніфесті.
Аарон Дігулла

Як встановити його для додавання .dll в Eclipse?
NoBugs

@NoBugs: В Eclipse ця публікація повинна допомогти: eclipsezone.com/eclipse/forums/t49342.html
Аарон Дігулла

@AaronDigulla, ви припускаєте, що DLL завжди може бути приєднана таким чином? Я думав, що він шукає лише щось подібне java.library.path. Ви припускаєте, що він шукає лише корінь jar?

4

У Windows:

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

% PATH% - це ваш старий шлях -Djava.library.path


Спробував цю ідею, але вона вийшла як java.library.path: D: \ Workspace \ myProject \ lib;% PATH%
Туко

Ви також можете використовувати $ {system_property: java.library.path}
Роб Елснер

2
Типовим для UNIX / Mac / GNU Linux є LD_LIBRARY_PATH. PATH - це річ для Windows.
whaefelinger

2

Чи можете ви обійти це, зателефонувавши System.load () програмно, щоб завантажити власну бібліотеку? Цей метод (на відміну від System.loadLibrary () ) дозволяє вказати абсолютний шлях.


1
Поясніть, будь ласка, як би ви програмно викликали System.load () під час запуску Eclipse?
whaefelinger

2

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

У системах UNIX ви можете додати змінну середовища LD_LIBRARY_PATH. У Windows JVM автоматично встановлює системну властивість, java.library.path, на PATH; отже, якщо dll знаходиться на вашому PATH, ви готові.


Початковий потік дуже конкретно говорив про те, як "додати" другу рідну папку бібліотеки, ви не згодні?
whaefelinger

@ user667073 Я говорив те саме ... ДОДАТОК - це питання, стартер ниток вже знає, як інакше завантажити спільну
бібліотеку

STS 3.4.0 та Mac OS 10.8: Налаштування LD_LIBRARY_PATH не впливають на java.library.path. Я перевірив це на Subclipse / JavaHL. Цей працював: STS --launcher.appendVmargs -vmargs -Djava.library.path = / opt / local / lib під час експорту LD_LIBRARY_PATH = / opt / local / lib; СТС був негативним.
whaefelinger

1

Вікно-> Налаштування-> Java-> Встановлені JRE. Потім оберіть свій поточний JRE (JDK) і натисніть Редагувати. Заповніть аргументи VM за замовчуванням: -Djava.library.path = / usr / local / xuggler / lib. Готово!


1
Ця відповідь марна, оскільки засіб запуску потоків спеціально запитує про "Як додати власну бібліотеку [..] замість того, щоб замінити [..]". Ця відповідь просто замінює налаштування за замовчуванням.
whaefelinger

1

Рішення, запропоноване Роб Елснером в одному з коментарів вище, працює бездоганно (OSX 10.9, Eclipse Kepler). Потрібно додати їх додаткові шляхи до розділених знаком ":".

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


0

Ім'я файла власної бібліотеки має відповідати імені файлу 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 "


Питання полягає в додаванні власної бібліотеки (папки) при запуску Eclipse.
whaefelinger

0

З якихось причин я не міг змусити працювати декілька папок (ну це деякий час це робило, але як тільки мені знадобилося більше DLL і додано більше папок, жодної з пробілів у шляху). Потім я скопіював усі необхідні dll в одну папку і мав це як мій java.library.path, і він працював. У мене немає пояснення - якщо хтось це зробить, це було б чудово.


Ну, якщо власну бібліотеку знайдено через java.library.path, і ви скопіюєте ще одну в цю папку, то, здається, природно, що друга бібліотека також знайдена, чи не так?
whaefelinger

Звичайно, саме тому я цим скористався, дух! Мені цікаво було, чи можна додати до неї кілька папок, не пересуваючи та не посилаючи матеріали.
Устаман Сангат

0

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

Для цього я дотримувався цих вказівок щодо запуску Eclipse із командного рядка Java замість його звичайної панелі запуску. Потім я просто змінив цей сценарій, щоб додати мій аргумент -Djava.library.path до командного рядка Java.


0
  1. У Windows: додайте шлях до бібліотеки до змінної середовища PATH.
  2. У Linux: Додайте шлях до бібліотеки до змінної середовища LD_LIBRARY_PATH.
  3. На Mac: додайте шлях до бібліотеки до змінної середовища DYLD_LIBRARY_PATH.

java.library.path ініціюється значеннями змінних вище на відповідній платформі.

Це має працювати на будь-якій IDE.

Ви можете перевірити, чи відповідає значення очікуваному, зателефонувавши java -XshowSettings:properties


-2

У Windows я виявив, що найважливішим є запуск Eclipse з командного рядка, а не з меню «Пуск» або ярлика, за умови, що рідна бібліотека DLL знаходиться в каталозі у вашому PATH. Очевидно, це гарантує, що відповідний каталог знаходиться на шляху.


Виправте мене, якщо я помиляюся, але я вважаю, що поточний робочий каталог у Windows автоматично включається під час пошуку бібліотек DLL (або виконуваних двійкових файлів). Таким чином, коли ви переходите в папку, де знаходяться бібліотеки DLL, і запускаєте, а потім Eclipse up, тоді так, бібліотеки DLL, які ви шукаєте, знайдуться. Окрім цього, як ця відповідь пов'язана із запитанням початківців ниток?
whaefelinger
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.