У меня есть приложение на основе maven, и оно ссылается на определенные библиотеки, которые помечены как предоставленные моим сервером приложений, например:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</verision>
<scope>provided</scope>
</dependency>
Теперь очевидно, что моему серверу приложений необходимо предоставить версию 2.5 сервлета api. Существуют ли какие-либо стратегии для обеспечения того, чтобы сервер приложений предоставлял правильную версию библиотеки (надеюсь, тесты развертывания также обнаружат это, но я надеюсь предотвратить несоответствие в первую очередь).
Ответ в вопросе: pom явно говорит, что версия 2.5 сервлета api «предоставляется», что означает предустановленную кем-то / чем-то. Maven был удален из обеспечения / обеспечения соблюдения этих зависимостей (в частности, проверка была отложена до среды выполнения или установщика). В этом случае зависимости будут управляться и предоставляться rpm / dpkg (... или Macports "порт", Cygwin"install.exe" ...) или просто добросовестная загрузка / установка вручную. Например, если предположить, что dpkg / rpm / port / etc, ваше приложение будет объявлено зависимым от «tomcat-6.x» или «glassfish-3.x» (и т. Д.).
На самом деле вы могли бы загрузить и упаковать реализацию сервлета с приложением maven в качестве соответствующей зависимости от maven, но (обычно) это не требуется, если только не создается небольшой автономный сервер (например, связанный с Winstone, как Дженкинс). В некоторых случаях вы можете выбрать оба варианта: так, диспетчер пакетов конечного пользователя (yumex, synaptic) будет отображать оба варианта. your-app-standalone
(в комплекте с сервером) и your-app-war
(только веб-приложение), для которого также потребуется установить сервер приложений.
Если вы выполняете развертывание в Linux, вы можете упаковать свою установку как пакеты PRM или DEB и указать им зависимости. Тогда rpm / dpkg откажется устанавливать ваше приложение, если сервер слишком старый. Для создания таких пакетов есть хорошие модули maven.