最新的Yusi主题上线啦!

Maven 如何为不同的环境打包

java lzxianren 700℃ 0评论

在开发的过程中,经常需要面对不同的运行环境(开发、测试、预生产、生产、内网、外网等等),在不同的环境中,相关的配置一般不一样,比如数据源配置、日志文件配置、以及一些软件运行过程中的基本配置。每次在不同环境部署程序时,修改配置非常麻烦,而且配置错误会产生不可预估的影响。很多程序员都因此被老板痛骂。

本文针对maven构建的java项目来说明如何通过maven为不同的环境打包。

多个POM文件

大家都知道pom文件有一段配置是说properties,那么很多配置都可以在pom文件中体现出来。我们可以搞多个pom文件,然后指定使用哪个pom文件。
比如:

  • pom.xml
  • pom-test.xml
  • pom-product.xml

maven 命令如下:

mvn clean package -f pom-test.xml

eclipse M2E 插件

goal : clean package -f pom-test.xml

这么做的问题是:

  1. 多个pom文件之间的重复配置会很多,不容易维护。
  2. 配置文件没法实现不同环境的修改

关于问题1,,也有解决办法:

    利用pom文件的继承性,抽象出来一个通用的pom,通过继承父pom文件,写多个子环境pom来实现。

但问题2就不太好解决了,只能把所有的配置文件放到pom中,这样感觉很不友好。

profile 方法

这里定义了三个环境,dev(开发环境)、test(测试环境)、pro(生产环境),其中开发环境是默认激活的(activeByDefault为true),这样如果在不指定profile时默认是开发环境。

同时每个profile还定义了两个属性,其中profiles.active表示被激活的profile的配置文件的目录。

对于工程目录修改为:
我的cnblog

在pom文件的build节点修改:

首先第一个资源文件位置src/main/resources需要排队提各个环境的配置文件,各个环境的配置我们在第二个节点中通过前面在profile中配置的profiles.active属性来指定。即src/main/resources/${profiles.active}。这样在激活指定的profile时,会加载指定目录下的配置文件,如当前激活的是pro profile,那么这个资源目录就是src/main/resources/pro。这样就达到了不同环境加载不同配置的目的。

执行命令: mvn clean package -P pro

转载请注明:程序员的自我修养 » Maven 如何为不同的环境打包

喜欢 (2)or分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址