使用 Maven profiles实现不同环境打包

在项目开发过程中,通常会有多套环境,如dev环境,SIT环境,uat环境,演练环境及生产环境,每个环境的配置都不相同,如何根据需要打不同环境的包呢,Maven的profile为我们提供了简单快捷的配置方式,通过激活不同的配置,就可以打出相应环境的包
一、工程结构
我的工程结构如下
在这里插入图片描述
在src/main/resources/prop/目录下,分别有dev,sit,prod三个环境的配置,接下来,我们需要根据配置,打不同环境的包

二、pom.xml文件中定义不同环境的profile配置
pom.xml文件的profile配置如下

<profiles>
		<profile>
			<id>dev</id>
			<properties>
				<profiles.active>dev</profiles.active>
			</properties>
			<activation>
				<activeByDefault>true</activeByDefault>
			</activation>
		</profile>
		<profile>
			<id>sit</id>
			<properties>
				<profiles.active>sit</profiles.active>
			</properties>
		</profile>
		<profile>
			<id>prod</id>
			<properties>
				<profiles.active>prod</profiles.active>
			</properties>
		</profile>
	</profiles>

说明:
1、在profiles标签中,定义了三个profile,分别对应dev,sit,prod环境,每个profile中都有一个唯一的id,后面打包时,会根据这个id,激活对应的环境,就可以打到对应环境的包
2、使用activeByDefault 标签属性设置默认激活的环境,这里配置的是dev环境,即在开发时,默认使用开发环境的配置

在编译打包时,希望打出来的包中的资源文件的结构和工程的结果一致,因此在pom.xml中需要对资源文件进行一些设置,如下

<build>
		<finalName>mcc.base.web</finalName>
		<resources>
			<resource>
				<directory>${project.basedir}/src/main/resources/prop/</directory>
				<excludes>
					<exclude>dev/*</exclude>
					<exclude>sit/*</exclude>
					<exclude>prod/*</exclude>
				</excludes>
				<includes>
					<include>wf/**</include><!--wf目录下所有文件及文件夹的内容  -->
				</includes>
				<targetPath>prop/</targetPath><!--wf目录下所有文件及文件夹的内容都输出到prop目录下  -->
			</resource>
			<!-- 将对应激活的环境的配置文件,输出到prop目录下 -->
			<resource>
                 <directory>${project.basedir}/src/main/resources/prop/${profiles.active}</directory>
                 <targetPath>prop/</targetPath>
                 <filtering>true</filtering>
            </resource>
            <!-- 其他资源文件,默认输出在classes目录下 -->
            <resource>
            	<directory>${project.basedir}/src/main/resources/</directory>
            	<includes>
            		<include>*/*</include><!-- 这样才能包含一层结构的子文件夹及内容,如excel目录,spring目录,sso目录 -->
            		<include>*</include><!-- resources目录下所有的文件,如dp-apps.xml文件,不包括文件夹 -->
            	</includes>
            </resource>
		</resources>
	</build>

说明:
1、第一个resource标签,排除了prop目录下dev,sit,prod目录下的所有文件,但是prop目录下还有wf文件夹,因此使用include将wf文件夹及子文件包含进来,并且输出到prop目录下
2、第二个resource标签,将对应激活的环境的配置文件,输出到prop目录下
3、第三个resource标签,将其他资源文件,默认输出在classes目录下

在打包之前,先看下已经打好的包的结构,方便理解上面这三个resource标签配置的作用,包的WEB-INF/classes目录文件如下,这样就和我们在eclipse中的工程结构一致了
在这里插入图片描述
文件夹sso,spring,excel,文件logback-dp.xml,dp-mvc.xml等能在classes目录下,主要是第三个resource标签配置的效果,如果没有这个标签的配置,这些文件不会在classes目录中

再来看prop目录下的内容
在这里插入图片描述
对应环境的配置文件,能在prop目录下,主要是第二个resource标签配置的效果,而wf目录及子文件已经在prop目录下了,这是第一个resource标签配置的效果

完整的pom.xml文件内容如下

	<profiles>
		<profile>
			<id>dev</id>
			<properties>
				<profiles.active>dev</profiles.active>
			</properties>
			<activation>
				<activeByDefault>true</activeByDefault>
			</activation>
		</profile>
		<profile>
			<id>sit</id>
			<properties>
				<profiles.active>sit</profiles.active>
			</properties>
		</profile>
		<profile>
			<id>prod</id>
			<properties>
				<profiles.active>prod</profiles.active>
			</properties>
		</profile>
	</profiles>
	<build>
		<finalName>mcc.base.web</finalName>
		<resources>
			<resource>
				<directory>${project.basedir}/src/main/resources/prop/</directory>
				<excludes>
					<exclude>dev/*</exclude>
					<exclude>sit/*</exclude>
					<exclude>prod/*</exclude>
				</excludes>
				<includes>
					<include>wf/**</include><!--wf目录下所有文件及文件夹的内容  -->
				</includes>
				<targetPath>prop/</targetPath><!--wf目录下所有文件及文件夹的内容都输出到prop目录下  -->
			</resource>
			<!-- 将对应激活的环境的配置文件,输出到prop目录下 -->
			<resource>
                 <directory>${project.basedir}/src/main/resources/prop/${profiles.active}</directory>
                 <targetPath>prop/</targetPath>
                 <filtering>true</filtering>
            </resource>
            <!-- 其他资源文件,默认输出在classes目录下 -->
            <resource>
            	<directory>${project.basedir}/src/main/resources/</directory>
            	<includes>
            		<include>*/*</include><!-- 这样才能包含一层结构的子文件夹及内容,如excel目录,spring目录,sso目录 -->
            		<include>*</include><!-- resources目录下所有的文件,如dp-apps.xml文件,不包括文件夹 -->
            	</includes>
            </resource>
		</resources>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-assembly-plugin</artifactId>
				<version>2.2.1</version>
				<executions>
					<execution>
						<id>>make-assembly</id>
						<phase>package</phase>
						<goals>
							<goal>single</goal>
						</goals>
						<configuration>
							<appendAssemblyId>false</appendAssemblyId>
							<descriptorRefs>
								<descriptorRef>jar-with-dependencies</descriptorRef>
							</descriptorRefs>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>

三、激活配置,打包
输入maven命令,通过-P指定要激活的环境,就会自动到pom.xml文件中匹配对应的profile,如下命令,要打生包包,-P后面的参数设置为prod,会自动匹配到属性id为prod的profile,打包时,会将prod目录下的配置文件打到包中

mvn clean install -P prod

如果是eclipse中,配置如下
在这里插入图片描述
Name:名称,随便取一个都可以
base directory:项目的根目录
Goals:要执行的maven命令 clean install -P prod
Skip Test:打勾表示跳过测试

执行完打包命令后,出现如下结果,说明打包成功

[INFO] Reactor Summary:
[INFO] 
[INFO] xxx.base 0.0.1-SNAPSHOT ............................ SUCCESS [  0.962 s]
[INFO] xxx.base.model ..................................... SUCCESS [  5.995 s]
[INFO] xxx.base.dao ....................................... SUCCESS [  2.662 s]
[INFO] xxx.base.service ................................... SUCCESS [ 27.902 s]
[INFO] xxx.base.web 0.0.1-SNAPSHOT ........................ SUCCESS [02:58 min]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 03:35 min
[INFO] Finished at: 2019-03-16T00:48:52+08:00
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值