Единственное место, где используется атрибут Class-Path
в манифесте, - это когда jar
, содержащий манифест, вызывается как исполняемый файл jar с использованием ("java -jar theFile.jar
").
Некоторые контейнеры сервлетов, кажется, поддерживают это, но согласно этому сообщению в списке рассылки (Извините, не смог найти что-нибудь более авторское так быстро), оно также не указано в спецификации.
Насколько я понимаю, веб-приложения обычно загружают свои классы, используя один загрузчик классов. Для «правильного» решения этой проблемы зависимости потребуется как минимум 2 разных загрузчика классов.
Решением для взлома может быть использование jarjar или аналогичного инструмента для упаковки различных библиотек вместе с их соответствующими зависимостями.
Таким образом, вы получите один jar
, содержащий Hibernate вместе с его библиотекой apache-commons, и еще один jar
, содержащий распорки, вместе с его библиотекой apache-commons. Каждая копия библиотеки apache-commons будет перемещена в разные пакеты (возможно, hibernate.org.apache.*
и struts.org.apache.*
), чтобы решить проблему с различными версиями classe.