Использование одних и тех же библиотек разных версий - PullRequest
0 голосов
/ 16 января 2012

У меня есть 2 библиотеки: owls.jar и envy.jar .Они зависят от lib jena.jar , но с двумя разными версиями, несовместимыми.завидую, используя старую версию - jena.jar , новые совы - jena2.jar Я хочу использовать их вместе с веб-приложением, работающим на glassfish-3.0.1 .Я использую IDEA 11 для развертывания моего веб-приложения.

У меня есть дерево каталогов, подобное этому:

  • webapp / web-inf / lib / envy.jar
  • webapp / web-inf / lib / owls.jar
  • webapp / lib / envy / jena.jar
  • webapp / lib / owls/jena2.jar

Я добавляю в manifest.mf путь класса зависти и совы libs следующим образом: .. / .. / lib /envy / jena.jar

Я использую -verbose: class , и я всегда получаю загруженный класс из jena.jar .Если я использую или не использую envy.jar , я всегда получаю загруженный класс из jena.jar .Только если я удаляю envy.jar , классы загружаются из jena2.jar

Есть ли способ использовать обе эти библиотеки?

1 Ответ

0 голосов
/ 16 января 2012

Единственный способ использовать 2 разные версии одного и того же класса - загрузить их через 2 разных загрузчика классов.То есть вы должны загрузить owls.jar__ и __jena.jar с одним загрузчиком классов и envy.jar и jena2.jar с другим.У этого решения есть свои подводные камни, вы, вероятно, должны исправить пользовательский код, который сможет использовать другой загрузчик классов, когда это необходимо, возможно, вам придется написать собственный загрузчик классов.

Насколько я знаю, естьнет встроенного решения для такой ситуации.Может быть, проще использовать более старую версию одной из приведенных выше банок, которая может поддерживать ту же версию jena.jar Это гораздо более простое решение.

...