Как справиться с конфликтом пути к классам

В моем проекте я использую как встроенную в Glassfish версию 3.1.1, так и библиотеку guava... Проблема в том, что Glassfish поставляется со старой реализацией guava (то есть google-коллекциями)...

Это приводит к NoSuchMethodError во время выполнения, например, при использовании Lists.reverse() или Sets.newIdentityHashSet(), которые были представлены позже в гуаве.

Я не нахожу никакого решения для решения этой проблемы... (единственное - вручную удалить каталог классов com/google в банке Glassfish...)


person sly7_7    schedule 30.09.2011    source источник
comment
Вы когда-нибудь находили обходной путь?   -  person JagWire    schedule 20.02.2014
comment
К сожалению, совсем нет...   -  person sly7_7    schedule 20.02.2014
comment
Если вам интересно, я нашел встроенную сборку v4, и проблема с classpath исчезла. Сборку можно найти здесь: grepcode.com/snapshot/maven.java.net/content/groups/promoted/   -  person JagWire    schedule 21.02.2014
comment
@JagWire Я больше не работаю с Glassfish, но очень приятно знать, что они это исправили. Я обновлю ответ Кевина по вашей ссылке. Большое спасибо за это :)   -  person sly7_7    schedule 21.02.2014
comment
У меня похожая проблема, но не со стеклянными рыбками, а с какой-то другой библиотекой jar из моих помпонов. К сожалению, у меня много библиотек в моих помпонах. Может ли кто-нибудь сказать мне, как отследить, какая банка вызывает конфликт? Я понятия не имею, как это сделать. Все, что я знаю, это то, что мой код дает сбой, когда я пытаюсь отредактировать свою гуаву в своих помпах выше 19.0, и я хочу использовать функциональность из 21 в своем проекте! но не может, пока эта проблема сохраняется...   -  person ycomp    schedule 01.06.2017


Ответы (3)


Glassfish никогда не должен был включать классы com.google в свою собственную банку. Это была ошибка.

ОБНОВЛЕНИЕ[@sly7_7]: кажется, что стеклянная рыба больше не включает гуаву в свою банку, но вместо этого она зависит от артефакта гуавы. Это должно решить проблему. Спасибо @JagWire за указание на это.

person Kevin Bourrillion    schedule 01.10.2011
comment
Вот что я думаю... и то же самое для slf4j :( - person sly7_7; 03.10.2011

Вы можете преодолеть это, указав ниже. Прочтите раздел Делегирование главы "Загрузчики классов".

<class-loader delegate="false" />

Проверьте этот пост SO для загрузки классов в приложениях Java EE в целом: Стандарт загрузки классов Java EE

person Aravind Yarram    schedule 30.09.2011
comment
Мы пробуем, но в нашем случае это не работает... Это приводит к ClassCastException (вероятно, из-за того, что одни и те же классы загружаются разными загрузчиками классов) - person sly7_7; 03.10.2011

Мне удалось устранить ошибку, используя следующую сборку Glassfish v4:

http://grepcode.com/snapshot/maven.java.net/content/groups/promoted/org.glassfish.main.extras/glassfish-embedded-all/4.0.1-b01

Может стоит взглянуть.

person JagWire    schedule 20.02.2014