Maven针对不同的环境使用Profile完成打包部署

一、前言:

        一个项目里总会有很多配置文件。而且一般都会有多套环境。开发的、测试的、正式的。而在这些不同的环境这些配置的值都会不一样。比如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 //

  1. mvn package –P profileTest1  

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Spring Boot进行项目开发时,可以通过使用Maven中的profile来实现在不同环境使用不同的镜像。 首先,在Maven配置文件(pom.xml)中定义多个profile,每个profile对应一个环境。例如,可以定义一个profile用于本地开发环境,一个profile用于测试环境,一个profile用于生产环境。 在每个profile中,可以配置不同Maven镜像来适应不同环境需求。可以指定不同的镜像地址、用户名和密码等信息。在配置中,也可以配置其他相关的依赖和插件等信息。 然后,可以在命令行中使用不同的参数来指定打包使用profile。例如,可以使用"-P"参数来指定使用profile。通过在不同环境使用不同profile,就可以在不同环境使用不同的镜像。 在执行Maven打包命令时,根据指定的profileMaven会自动根据配置进行相应的打包操作。 使用Maven镜像不同的好处是可以根据环境不同,动态地切换镜像,以便更好地适应不同环境下的需求。例如,在本地开发环境中,可以使用本地私服或者本地下载的镜像,以提高打包速度和依赖管理效率;在测试环境或者生产环境中,可以使用公共的镜像来确保项目的稳定性和一致性。 通过以上的方式,我们可以很方便地使用Maven来实现在不同环境打包使用不同的镜像。这样可以提高开发和部署的效率,并且能够更好地满足不同环境下的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值