最近准备把正在开发的项目给分为两个环境来部署,使用jenkins进行自动构建。

把maven部署多环境相关的资料看了下,都比较难理解,于是自己摸索,找到一个比较好的办法。

首先在 src/main/resource 下建两个文件夹,具体几个看你的环境有几个,我这里是分了两个,dev和product,开发环境和正式环境。

然后将配置文件分别放入两个目录中,然后把两个环境中的配置配好

接下来编辑项目的pom文件

进行如下配置

<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">
     ......
     ......
    <profiles>
    <!-- 开发环境 -->
        <profile>
            <id>dev</id>
            <properties>
                <env>dev</env>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <!-- 正式环境 -->
        <profile>
            <id>product</id>
            <properties>
                <env>product</env>
            </properties>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
        </profile>
    </profiles>
     ......
     ......
</project>

中间的properties是用来作为变量能在下文中取到的

然后在build节点中进行如下配置

<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">
......
......
<build>
    ......
    ......
    <resources>
        <!-- 此处是因为我的java目录中有一些xml文件,
        如果你的项目中的java目录下没有xml文件则可以不用配 -->
	<resource>
		<directory>src/main/java</directory>
		<includes>
			<include>**/*.properties</include>
			<include>**/*.xml</include>
		</includes>
		<!-- 是否替换资源中的属性 -->
		<filtering>false</filtering>
	</resource>
	<!-- 此处的用法就是${env}会替换成你的上面选择的具体环境 -->
	<resource>
		<directory>src/main/resources/${env}</directory>
		<!-- 是否替换资源中的属性 -->
		<filtering>true</filtering>
	</resource>
    </resources>
    ......
    ......
</build>
     ......
     ......
</project>

最后使用maven命令进行编译打包

mvn clean package -Pproduct

-P为指定某个profile,后面跟上具体的profile就行了,比如上面就指定的是product的profile,如果不加,则默认是dev的profile,可以倒回上面的配置看。

接下来就会根据你的命令进行编译打包啦~