Как может я Java webstart несколько, зависимый, собственные библиотеки?

Пример: у Меня есть два общих объекта (то же должно относиться к .dlls). Первый общий объект из сторонней библиотеки, мы назовем его libA.so. Я перенес часть этого с JNI и создал мою собственную библиотеку, libB.so. Теперь libB зависит от libA.

Когда webstarting, обе библиотеки являются местами в некоторой webstart рабочей области. Мой код Java пытается загрузить libB. В этой точке системный загрузчик попытается загрузить libA, который не находится в пути системной библиотеки (java.library.path, не поможет этому). Конечный результат состоит в том, что libB имеет неудовлетворенную ссылку и не может использоваться.

Я попытался загрузить libA прежде libB, но это все еще не работает. Кажется, что ОС хочет сделать ту загрузку для меня. Есть ли какой-либо способ, которым я могу сделать эту работу кроме статичной компиляции?

16
задан JoshDM 31 July 2019 в 20:53
поделиться

3 ответа

Статическая компиляция оказалась единственным путем к webstart несколько зависимых собственных библиотек.

3
ответ дан 30 November 2019 в 23:14
поделиться

Я не уверен, было ли это бы обработано точно тот же путь к webstart, но мы столкнулись с этой ситуацией в настольном приложении при контакте с рядом собственных библиотек (dlls в нашем случае).

Загрузка libA прежде libB должна работать, если одна из тех библиотек не имеет зависимость, которая является неучтенной а не в пути. Мое понимание - то, что, после того как это получает к системе loadLibrary вызов (т.е. Java нашел библиотеку в ее java.library.path и теперь говорит ОС загружать его) - это абсолютно зависит от операционной системы для нахождения любых зависимых библиотек, потому что в той точке это - операционная система, которая загружает библиотеку для процесса, и ОС только знает, как посмотреть в системном пути. Это кажется твердым установить в случае приложения Webstart, но существует путь вокруг этого, которое не включает статическую компиляцию. Вы можете переставлять, где Ваши библиотеки - я не уверен

, Если Вы используете пользовательский classloader, можно переопределить loadLibrary и findLibrary так, чтобы он мог определить местоположение библиотек из банки в пути к классу, и если Вы также делаете его знающий о Ваших собственных зависимостях библиотеки (т.е. libB зависит от libA, зависит от libX, затем когда загрузка libB Вы может поймать себя и гарантировать, чтобы Вы загрузили libA сначала, и в проверке того уведомления и загрузили libX сначала. Затем ОС не пытается найти библиотеку, которая не находится в Вашем пути. Это неуклюже, и немного болезненный, но удостоверяющийся Java находит их и загружает их всех, в правильном порядке может работать.

6
ответ дан 30 November 2019 в 23:14
поделиться

Обе собственных библиотеки упаковываются в , подписался банка, которая перечислена как

<nativelib ...> 

В файле JNLP?

1
ответ дан 30 November 2019 в 23:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: