Maven为不同环境打包war
Contents
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