Maven为生产环境,测试环境(或者更多)的不同而使用不同的配置文件

首先,为项目准备好不同的环境存放的配置文件的目录比如

存放测试环境的配置文件 src/main/env/dev

存放生产环境的配置文件 src/main/env/product

详细情况如下:

project/
`-- src
    |-- main
    |   |-- java
    |   |-- env
    |   |   |-- dev
    |   |   |   |-- core.properties
    |   |   |   |-- jdbc.properties
    |   |   |   `-- spring.xml
    |   |   |-- product
    |   |   |   |-- core.properties
    |   |   |   |-- jdbc.properties
    |   |   |   `-- spring.xml
    |   `-- webroot
    `-- test

配置pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.test.maven.package</groupId>
	<artifactId>package</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>

	<properties>
		<spring.version>3.2.6.RELEASE</spring.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<profiles>
		<profile>
			<id>default</id>
			<activation>
				<activeByDefault>true</activeByDefault>
			</activation>
			<properties>
				<!-- dev env -->
				<runtime.env>src/main/env/dev</runtime.env>
                                <!-- 这里添加放根据开发环境需要配置的其他的 property 数据 -->
			</properties>
		</profile>

		<profile>
			<id>product</id>
			<activation>
				<activeByDefault>false</activeByDefault>
			</activation>
			<properties>
				<!-- product env -->
				<runtime.env>src/main/env/product</runtime.env>
                                <!-- 这里添加放根据生产环境需要配置的其他的 property 数据 -->
			</properties>
		</profile>
	</profiles>


	<dependencies>
		<!-- 这里放项目依赖的jar包 -->
	</dependencies>

	<build>
		<finalName>ROOT</finalName>
		<sourceDirectory>src/main/java</sourceDirectory>
		<scriptSourceDirectory>${runtime.env}</scriptSourceDirectory>
		<resources>
			<resource>
				<directory>src/main/java</directory>
				<includes>
                   <!-- 如果上面的directory有除了java文件以外的文件,也要在这里配置,需要copy到编译后的classes目录里 -->
					<include>**/*.xml</include>
				</includes>
				<filtering>false</filtering>
			</resource>
			<resource>
				<directory>${runtime.env}</directory>
				<includes>
                    <!-- 这里是按需copy所要的文件 -->
					<include>**/*.xml</include>
					<include>**/*.json</include>
					<include>**/*.properties</include>
     			</includes>
                <!-- 这里是否开启过虑,即上面的文件是否有占位符 ${变量} 之类的,如果有就要设置为true,否则就是false -->
				<filtering>true</filtering>
			</resource>
		</resources>
		<outputDirectory>webroot/WEB-INF/classes</outputDirectory>
		<plugins>
			<plugin>
				<artifactId>maven-war-plugin</artifactId>
				<version>2.3</version>
				<configuration>
					<webXml>webroot/WEB-INF/web.xml</webXml>
					<warSourceDirectory>webroot</warSourceDirectory>
					<failOnMissingWebXml>false</failOnMissingWebXml>
					<webResources>
						<resource>
							<directory>${runtime.env}</directory>
							<targetPath>WEB-INF/classes</targetPath>
							<filtering>true</filtering>
						</resource>
					</webResources>
				</configuration>
			</plugin>
			<plugin>
				<artifactId>maven-antrun-plugin</artifactId>
				<executions>
					<execution>
						<id>copy-lib-src-webapps</id>
						<phase>package</phase>
						<configuration>
							<tasks>
                               <!-- 这里的作用是将target下编译好的数据,复制回到webroot下的,对应的目录,因为有些人喜欢直接将tomcat的部署目录指向项目路径,而不是tomcat默认的部署目录里 -->
								<copy todir="webroot/WEB-INF/lib">
									<fileset dir="target/ROOT/WEB-INF/lib">
										<include name="*" />
									</fileset>
								</copy>
								<copy todir="webroot/WEB-INF/classes">
									<fileset dir="target/ROOT/WEB-INF/classes">
										<include name="*" />
									</fileset>
								</copy>
							</tasks>
						</configuration>
						<goals>
							<goal>run</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>

</project>

打包

开发环境

#如果打包时需要调用测试代码,就去掉最后的参数,这里为了加快编译,直接去掉了测试代码。
#因为默认情况下就是开发环境,所以不需要特别添加参数
mvn clean package  -Dmaven.test.skip=true

生产环境

#如果打包时需要调用测试代码,就去掉最后的参数,这里为了加快编译,直接去掉了测试代码。
#用 `-P` 指定环境参数
mvn clean package -Pproduct -Dmaven.test.skip=true