我假设您希望能够在开发时进行本地测试,针对暂存环境测试您的更改并最终部署到生产环境。
您需要记住的关键是,当工件被部署到本地/远程存储库时,活动配置文件不是部署内容的一部分,因此当您通过配置文件添加依赖项时,事情变得非常危险,因为您没有了解 webapp 是在 DEV 配置文件激活还是 PROD 配置文件激活的情况下构建的方法,然后当构建的工件部署到生产中时,您可能会被彻底搞砸。
因此,不足之处在于您确保您的工件独立于部署环境。
这意味着,例如,您将从以下位置获取配置:
因此,例如,如果部署到 Tomcat,您可以将 configuration.properties 放入$CATALINA_HOME/lib
您的 webapp 在启动时将用于getClass().getResource('/configuration.properties')
解析属性文件,如果文件丢失,则无法启动(快速失败)
您可以通过将 configuration.properties 的测试版本放入src/test/resources
.
<scope>provided</scope>
您对应用程序的样式依赖项使用相同的原则。换句话说,容器与提供的契约签订的依赖关系应该由容器提供。因此,您也可以使用 Maven 为自己构建 tomcat/jetty 的生产版本,并将所需的依赖项添加到该程序集中。这就像生产版本使用 MySQL 数据库一样,因此您需要将 mysql-jdbc 驱动程序添加到$CATALINA_HOME/lib
. 使用组装插件执行此操作相对容易,因为您实际上只是重新打包一个包含一些位而排除其他位的 zip。
在本地测试时,您将需要使用辅助插件的run
目标,例如jetty:run
和tomcat:run
. 这里的解决方案是通过配置文件提供这些插件依赖项并没有错,因为您不会影响工件的依赖项,而只会影响插件的类路径。
例如
<project>
<!-- ... some stuff .. -->
<profiles>
<profile>
<id>DEV</id>
<build>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.18</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
您还可以配置系统属性或类路径添加以引入所需的配置文件。
所有这一切的最终结果是工件保持环境独立,您可以轻松地针对各种环境进行测试
希望这能回答你的问题(即使横向)