保持应用程序库版本与服务器同步

保持应用程序库版本与服务器同步

我有一个基于 Maven 的应用程序,它引用了标记为由我的应用程序服务器提供的某些库,例如:

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>servlet-api</artifactId>
  <version>2.5</verision>
  <scope>provided</scope>
</dependency>

现在显然我的应用服务器需要提供 2.5 版 servlet api。是否有任何策略可以确保向应用服务器提供正确版本的库(希望部署测试也能发现这一点,但我希望首先防止不匹配)。

答案1

如果您在 Linux 上部署,您可以将安装打包为 PRM 或 DEB 包并为其提供依赖项。然后,如果服务器太旧,rpm/dpkg 将拒绝安装您的应用程序。有很好的 maven 模块可用于创建此类包。

答案2

答案就在问题中:pom 明确指出 servlet api 的 2.5 版本是“提供的”,这意味着由某人/某物预先安装。Maven 已不再提供/确保满足这些依赖关系(更具体地说,检查已推迟到运行时或安装程序)。在这种情况下,依赖关系将由 rpm/dpkg 管理和提供(...或苹果端口“港口”,赛格威的“install.exe”...)或只是认真的手动下载/安装。例如,假设 dpkg/rpm/port/etc,您的应用将被声明为依赖于“tomcat-6.x”或“glassfish-3.x”(等等)。

实际上,你可以让 maven 下载并将 servlet 实现与你的应用程序一起打包为适当的 maven 依赖项,但(通常)这不是想要的,除非是为了创建一个小型独立服务器(例如,捆绑 w/温斯顿,例如 jenkins)。在某些情况下,您可能实际上选择提供这两个选项:因此,最终用户的包管理器(yumex、synaptic)将显示your-app-standalone(与服务器捆绑)和your-app-war(仅 Web 应用程序),这需要安装一些应用服务器。

相关内容