Как сослаться на .dll из файла .jar - PullRequest
5 голосов
/ 30 марта 2010

У меня есть приложение, которое использует методы в .jar, которое вызывает .dll. Это прекрасно работает на моем компьютере (когда приложение распаковано или запускается как сам файл .jar), но когда application.jar запускается на другом компьютере с внешним .dll по системному пути, он не может запустить файл dll .

.dll должен быть расположен где-то особенным? Я предположил, что, как и в системном пути, он будет найден.

Заранее спасибо

Дуга

Ответы [ 4 ]

4 голосов
/ 12 октября 2010

Решение java.library.path не всегда хорошо: во многих ситуациях невозможно изменить параметры JVM. Лучшие решения:

1) уже упоминалось: поместите DLL в тот же каталог, что и JAR, к сожалению, это усложняет использование такого JAR - теперь JAR - не просто JAR, а сопровождающая его DLL

2) поместите DLL в JAR как обычный ресурс, во время запуска JAR извлеките эту DLL куда-нибудь, например. $ TMP, а затем используйте System.load (новый файл (...)), как указано выше. Тогда этот JAR - просто JAR, пользователи этого JAR могут даже не знать, что он использует какие-либо DLL

Вы также можете использовать плагин Maven NAR, который является довольно мощным, если вы используете Maven для сборок. Смотри http://duns.github.com/maven-nar-plugin/

1 голос
/ 06 октября 2010

Попробуйте использовать:

File dll = new File([...]);

System.load(dll.getAbsolutPath());

Я бы упаковал dll в ту же директорию, что и ваш jar-архив.

0 голосов
/ 30 марта 2010

Если вы используете Sun JVM, расположение командной строки можно указать в командной строке, указав в командной строке путь к библиотеке java.

Это можно сделать с помощью опции "-Djava.library.path = dll directory"

Это может зависеть от того, как библиотека загружается в исходный код Java. У вас есть доступ к этому? Вы можете разместить код?

Если Java-код использует System.load (String), он ожидает полный путь к DLL.

Если он использует System.loadLibrary (String), он ожидает только имя библиотеки и будет искать в месте, указанном параметром java.library.path.

0 голосов
/ 30 марта 2010

Я бы предложил поместить его в ту же папку, что и ваше приложение. Сказав, что "он не может запустить файл DLL" немного расплывчато ... вы уверены, что это не проблема с другой DLL, являющейся другой версией (и, следовательно, не загружается должным образом, а не не найден в все)

Кроме того, путь поиска библиотеки определяется параметром java.library.path .

...