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

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

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

现在显然我的应用程序服务器需要提供servlet api的2.5版本。 有没有什么策略可以确保正确的版本库提供给应用服务器(希望部署testing也会发现这个,但是我希望能够防止不匹配的发生)。

如果您正在Linux上进行部署,则可以将安装打包为PRM或DEB包,并为其提供依赖关系。 那么如果服务器太旧,rpm / dpkg将拒绝安装你的应用程序。 有很好的Maven模块来创build这样的包。

问题的答案在于:pom明确指出servlet api的2.5版本是“提供的”,这意味着由某人/某事预先安装。 Maven已经从提供/确保满足这些依赖关系中被移除了(更具体地说,这个检查被推迟到了运行时或者安装程序)。 在这种情况下,相关性将由rpm / dpkg(…或macports “port”, cygwin的“install.exe”…)进行pipe理和提供,或者只是一个认真的手动下载/安装。 例如,假设dpkg / rpm / port / etc,你的应用程序将被声明依赖于“tomcat-6.x”或“glassfish-3.x”等。

你实际上可能会有Maven下载,并将你的应用程序打包成一个适当的Maven依赖项,但通常情况下,这是不需要的,除非是创build一个小的独立服务器(例如,捆绑w / winstone ,如jenkins) 。 在某些情况下,你可能会select提供两种select:所以,最终用户的包pipe理器(yumex,synaptic)会同时显示your-app-standalone (捆绑w / a服务器)和your-app-war (只是web应用程序),这将需要一些应用程序服务器也被安装。