一、前言:
一个项目里总会有很多配置文件。而且一般都会有多套环境。开发的、测试的、正式的。而在这些不同的环境这些配置的值都会不一样。比如mail的配置、服务的url配置这些都是很常见的。所以在打包的时候就要根据environment来选不同的值或者配置文件。
解决办法:
1. 不同的环境建立不同的配置文件目录。在打包的时候用对应的文件目录下的配置文件。
以前用ant打包的时候处理就比较方便。打包前copy一下对应目录下的配置文件覆盖target下的那些文件,然后再打包就可以了。在刚开始用maven的时候就想要怎么解决,一直没有在Maven中找到ant的这种替代方式。其实主要是按ant这种处理方法去思考了,所以就只去想没有有copy这种target。
2. 其实在maven中用profile可以更简单的解决。
二、使用Maven的profile功能
1.配置pom.xml: 在pom.xml中配置dev, qa, prod三个配置文件为资源源文件,代表着3种环境下的配置文件。观看下面的pom.xml文件
1) 在resource下指定<directory>src/main/resources</directory> 和<filtering>true</filtering>,<include>*.*</include>,意思是对src/main/resources目录下的所有文件(本例子中就是上面你看到的settings.properties文件)进行占位符替换。即用dev.properties或者是qa.properties, prod.properties的内容来替换settings.properties中的占位符。换句话说,就是我们在项目中实际上用的资源文件是settings.properties,而这个文件的内容有时是qa.properties,有时是dev.properties,有时是prod.properties。
2) <activation> ... </activation>表示的是可以用这样的命令来触发profile,比如用
mvn clean install -DskipTests -Denv=qa, 表示出发qa的profile,也就是会用qa.properties文件来替换settings.properties.
3) ... <activeByDefault>true</activeByDefault> ... 表示dev是默认的profile
即 mvn clean install -DskipTests -Denv=dev 等价于 mvn clean install -DskipTests
<profiles>
<profile>
<id>dev</id>
<build>
<filters>
<filter>src/main/resources/filters/dev.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<!-- optional -->
<includes>
<include>*.*</include>
</includes>
</resource>
</resources>
</build>
<activation>
<activeByDefault>true</activeByDefault>
<property>
<name>env</name>
<value>dev</value>
</property>
</activation>
</profile>
<profile>
<id>qa</id>
<build>
<filters>
<filter>src/main/resources/filters/qa.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<!-- optional -->
<includes>
<include>*.*</include>
</includes>
</resource>
</resources>
</build>
<activation>
<property>
<name>env</name>
<value>qa</value>
</property>
</activation>
</profile>
<profile>
<id>prod</id>
<build>
<filters>
<filter>src/main/resources/filters/prod.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<!-- optional -->
<includes>
<include>*.*</include>
</includes>
</resource>
</resources>
</build>
<activation>
<property>
<name>env</name>
<value>prod</value>
</property>
</activation>
</profile>
</profiles>
2. 配置qa.properties, dev.properties, prod.properties.以及settings.properties.
1) settings.properteis:
CMSDB_ENDPOINT=${CMSDB_ENDPOINT}
2) qa.properties:
CMSDB_ENDPOINT=http://phx5qa01c-5fca.stratus.phx.qa.xx.com:8080/cms
3) dev.properties:
CMSDB_ENDPOINT=http://localhost:8080/cms
4) prod.properties:
CMSDB_ENDPOINT=http://cms.vip.stratus.xx.com/cms
3. 使用下面的命令,然后查看settings.xml的内容。
mvn clean install -DskipTests
mvn clean install -DskipTests -Denv=qa
mvn clean install -DskipTests -Denv=prod
你会发现settings中的内容会根据你所执行命令的不同而不同,这正是我们所需要的。
相关推荐
当前案例中包含一整套的代码和word文档,非常适合新手... 主要是通过maven打包加载不同环境的properties文件 然后将对于的属性绑定到指定的实体对象中;然后通过调用接口可以看到加载不同环境控制台打印的内容是不一样的
NULL 博文链接:https://hejiawangjava.iteye.com/blog/2280427
在maven中实现多环境的构建可移植性需要使用profile,通过不同的环境激活不同的profile来达到构建的可移植性。
主要介绍了使用maven profile指定配置文件打包适用多环境的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
maven打包 maven打jar包详细步骤
当前案例中包含一整套的代码和word文档,非常适合新手代码简单易懂; 主要是通过maven打包配合springboot application.properties文件配置实现通过打包来完成加载不同环境的配置内容;
IDEA中使用maven打jar包,然后使用工具混淆代码,亲测有效
python自动化打包java maven工程,并上传至服务器,简化服务器war上传步骤和节约时间
Spring Boot项目使用maven-assembly-plugin根据不同环境打包成tar.gz或者zip
maven 环境搭建总结 maven心得
jenkins+maven+svn+tomcat 持续集成环境快捷部署,实现自动编译打包部署
maven多环境部署pom文件实例,简单实用。
工程运行环境有研发,测试和生产,不同的运行环境配置不同,maven 打包时指定文件目录,使用指定的文件夹下的配置文件。
NULL 博文链接:https://clojure.iteye.com/blog/2091511
maven项目完成tomcat的部署,完美解决maven建立的项目转成web项目,并且部署到tomcat的解决方法
使用maven 对java程序编译构建,打包和部署。自动化部署
maven 打包 部署到tomcat 删除的jar包,无法访问jsp的情况
maven+bat打包,通过在maven中配置插件执行bat脚本进行目录下的打包。
myeclipse中maven的一些常见功能总结;借助maven将本地项目部署到远程tomcat容器。
sprintboot maven 打包分离lib jar 资源文件 properties xml yml 详细信息查看我的博客 https://mp.csdn.net/postedit/80274087 java -jar -cp 启动