我有一个用Maven生成的Java EE 6应用程序,在NetBeans 7中编码,并部署在GlassFish 3.1.2上。当我快要完成时,我发现自己正在部署演示版本。
问题是,我没有针对不同环境(如dev,QA,demo,prod等)构建的简单方法。对于某些东西,我一直在使用Java类,该类具有大量返回的静态getter值基于环境常数的值。但这对我有条件设置没有帮助
可能还有许多其他我现在无法考虑的事情,这些事情分散在XML文件中。
有没有什么方法可以定义这些配置文件的多个版本,并仅在构建时设置标志以选择环境,而在未指定环境的情况下默认为dev?在这种情况下,有什么办法可以让Maven为我工作?
您可以使用maven来实现。特别是使用资源过滤。
首先,您可以定义配置文件列表:
<profiles> <profile> <id>dev</id> <properties> <env>development</env> </properties> <activation> <activeByDefault>true</activeByDefault> <!-- use dev profile by default --> </activation> </profile> <profile> <id>prod</id> <properties> <env>production</env> </properties> </profile> </profiles>
然后,您需要过滤的资源:
<build> <outputDirectory>${basedir}/src/main/webapp/WEB-INF/classes</outputDirectory> <filters> <filter>src/main/filters/filter-${env}.properties</filter> <!-- ${env} default to "development" --> </filters> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.xml</include> <include>**/*.properties</include> </includes> <filtering>true</filtering> </resource> </resources> </build>
然后基于src/main/filters目录中的配置文件的自定义属性:
src/main/filters
filter-development.properties
# profile for developer db.driver=org.hsqldb.jdbcDriver db.url=jdbc:hsqldb:mem:web
和
filter-production.properties
# profile for production db.driver=com.mysql.jdbc.Driver db.url=jdbc:mysql://localhost:3306/web?createDatabaseIfNotExist=true
要使用生产配置文件,您可以使用mvn clean package -Pprodcommand 打包war 。
mvn clean package -Pprod
在这里,您可以看到在maven中使用配置文件的示例项目。