2010-11-06 2 views
9

как я могу загрузить библиотеку из банки? , например.Загрузить библиотеку из jar

Test.jar 
+- libAbc.so 
+- libDef.so 
+- ... 
+1

Возможный дубликат [как сделать файл jar, содержащий файлы dll] (http://stackoverflow.com/questions/1611357/how-to-make-a-jar-file-that-include-dll-files) –

+1

Возможный дубликат [Извлечь и загрузить DLL из JAR] (http://stackoverflow.com/questions/4764347/extract-and-load-dll-from-jar) – Raedwald

ответ

1

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

Можете ли вы развернуть свою библиотеку рядом с файлом jar?

0

Библиотеки должны быть загружены из файловой системы. Таким образом, вы можете извлечь свою библиотеку из банки в каталог temp и загрузить ее.

6

Вам необходимо распаковать его во временный каталог и использовать `System.load (« путь/to/libAbc.so »).

Это был discussed previously.

Отредактировано: исправлено сообщение.

+0

Ваша ссылка «ранее обсуждалась» не отображается релевантно –

+0

Извините, моя ошибка. Ссылка была исправлена. –

7

Вероятно, не ответ, который вы ищете (извлечения файла в папку темпа является ответа вы ищете), но я думал, что я разделю некоторый опыт реального мира:

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

При добавлении факта, что многие операционные системы не позволяют использовать только какой-либо файл в качестве библиотеки (и часто разрешения для пользователя, который будет запускать приложение, не позволяют им отмечать произвольный файл в папке temp для исполнения) идея упаковки собственных библиотек внутри банки становится менее привлекательной.

Что мы, в конце концов, закончили делать, это переход к модели, где у нас есть наш установщик (который выполняет с достаточными разрешениями) поместите соответствующую родную библиотеку рядом с банкой. Это довольно просто сделать, сохраняет все исполняемые библиотеки в одном месте и легко управляется и понимает (пытаясь отследить несовместимость версии в одном приложении b/c, она пытается загрузить библиотеку, которая была сохранена в временном хранилище по второй заявке - полный кошмар).

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