ant taskdef - java.lang.UnsatisfiedLinkError: JSTAF (библиотека уже загружена в другой загрузчик классов) - PullRequest
0 голосов
/ 25 марта 2011

Я написал две разные задачи, которые должны загрузить одну и ту же библиотеку, которая содержит несколько классов, импортированных в следующие задачи:

<taskdef name="someTask1" classname="somepackage.someTask1" classpath="Tasks1.jar;/pathtolib/MyJar.jar" />
<taskdef name="someTask2" classname="somepackage.someTask2" classpath="Task2s.jar;/pathtojar/MyJar.jar"/>

Поскольку я не могу загрузить одну и ту же библиотеку два раза, я получаюследующая ошибка:

21: java.lang.UnsatisfiedLinkError: MyJar (Library is already loaded in another ClassLoader)

Как я могу решить эту проблему?

1 Ответ

0 голосов
/ 25 марта 2011

Это нативная библиотека?

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

Если да, то вы столкнулись с одним из последствий разработки «песочницы» Java: базовая ОС обычно позволяет загружать общую библиотеку только один раз. И разным загрузчикам классов, поскольку они потенциально представляют точку изоляции между различными приложениями, не разрешается использовать собственные библиотеки (поскольку это может открыть доступ к атакам между приложениями).

Ant делает это немного хуже, потому что он использует отдельный загрузчик классов для каждой задачи (см. это сообщение в блоге ). И я думаю, что лучшим решением, как описано в этом блоге, является создание спецификации antlib , которая объединит все ваши задачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...