2010-03-30 2 views
4

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

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

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

Дуги

+0

Возможно, на ClassPath, но я действительно не знаю ... –

+1

Можете ли вы добавить дополнительную информацию об используемых операционных системах? Кроме того, является ли Java-код просто использованием JNI или используется какой-то определенный для платформы метод (например, загрузка COM-библиотек с помощью J-Integra)? Наконец, попробовали ли вы просто поместить файл DLL и JAR-файл в тот же каталог? –

ответ

0

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

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

0

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

Это можно сделать с помощью опции «директории -Djava.library.path = длл»

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

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

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

1

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

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

System.load(dll.getAbsolutPath());

Я бы упаковать DLL в том же каталоге, что и банку-архив.

3

Решение 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/

Смежные вопросы