`
Josh_Persistence
  • 浏览: 1651594 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

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

你会发现settings中的内容会根据你所执行命令的不同而不同,这正是我们所需要的。

 

  • 大小: 2.9 KB
1
6
分享到:
评论

相关推荐

    maven多环境配置打包

    总结来说,Maven的多环境配置打包能力使得Java项目能灵活适应不同环境,提高了代码的可维护性和部署效率。通过理解和熟练运用profiles和resource filtering,开发者可以更好地管理项目的配置,提升开发效率。

    使用maven profile指定配置文件打包适用多环境的方法

    使用maven profile指定配置文件打包适用多环境的方法 ...使用Maven Profile指定配置文件打包适用多环境的方法是一种非常实用的方法,能够帮助开发者轻松地在不同的环境中切换配置文件,避免了频繁修改配置文件的麻烦。

    maven多环境部署pom文件实例

    本文将深入探讨如何使用Maven的POM(Project Object Model)文件实现多环境部署,使得代码能够在开发、测试和生产等不同环境中无缝切换。 首先,让我们理解什么是POM文件。POM是Maven的核心概念,它是一个XML文件,...

    maven 一键打包

    此时,可以通过Maven的profile功能,定义不同环境的配置,并在打包时选择相应的profile。 ### Maven profile Profile是Maven中的一个概念,用于根据不同的环境条件启用或禁用一组设置。例如,你可以创建名为`dev`、...

    Jenkins+Maven+SVN+Tomcat 持续集成环境快捷部署

    整个持续集成环境部署完成后,开发人员每提交一次代码更改,Jenkins就会自动运行预设的构建任务,完成代码的编译、打包、部署等一系列自动化流程,从而提高开发效率和软件质量。 需要注意的是,在实际操作中可能会...

    使用maven Filtering实现多环境构建

    在实际应用中,还可以结合使用Maven的`assembly插件`或`jar-maven-plugin`来打包不同环境的可执行JAR或WAR文件,使得部署更便捷。此外,一些企业级的Maven插件,如Spring Boot的`spring-boot-maven-plugin`,也提供...

    Maven在Windows下环境搭建

    Maven是Java开发中的一个项目管理工具,它帮助开发者构建、管理和部署项目,通过依赖管理和项目对象模型(Project Object Model, POM)来简化构建过程。本篇文章将详细讲解如何在Windows操作系统上搭建Maven环境。 ...

    maven免安装绿色环境

    3. **插件机制**:Maven拥有丰富的插件生态系统,可以执行编译、测试、打包、部署等各种构建任务。例如,maven-compiler-plugin用于编译源代码,maven-surefire-plugin用于运行单元测试。 4. **生命周期(Lifecycle...

    maven安装和使用

    1. **自动化构建**:Maven简化了项目构建流程,从清理、编译、测试到生成报告、打包和部署,只需一条简单的命令(例如`mvn clean install`)即可完成一系列操作。这一特性极大地提高了工作效率,减少了重复劳动。 2....

    maven3.2.5下载

    7. ** Profiles**:Maven的Profile功能允许根据不同的环境(如开发、测试、生产)配置不同的属性和依赖,方便在不同环境下构建项目。 8. **构建过程**:Maven3.2.5通过简单的命令行指令(如`mvn clean install`)...

    Maven安装指南:详细步骤与环境配置教程

    为了能够在命令行中使用Maven,需要将Maven的`bin`目录添加到系统的`PATH`环境变量中。此外,还需要设置`JAVA_HOME`环境变量,将其指向JDK的安装目录。具体步骤如下: - **Windows系统**: - 打开“控制面板”&gt;...

    Jenkins_Maven_Git 持续集成及自动化部署 GentOS版

    ### Jenkins、Maven与Git在...至此,已经完成了Jenkins、Maven与Git持续集成所需的基础环境搭建工作。接下来可以进一步配置Jenkins服务器,使其能够与Git仓库以及Maven项目集成,实现自动化构建、测试和部署等功能。

    maven一键部署相关安装包及脚本

    - **构建生命周期**:Maven有一套预定义的构建生命周期,包括清理、编译、测试、打包、集成测试、验证、部署等阶段,开发者可以通过简单的命令如`mvn clean install`来执行整个生命周期。 - **插件机制**:Maven...

    maven3.6的安装包

    Maven的强大之处还在于它的生命周期和插件机制,可以根据项目的不同阶段和需求进行灵活定制。 总的来说,Maven 3.6.3 是一个功能强大的工具,通过合理的配置和使用,可以极大地提高Java开发的效率和项目的可维护性...

    maven压缩包解压后使用

    - **环境变量设置**: 添加Maven的`bin`目录到系统PATH环境变量中。例如,如果Maven解压在`C:\Program Files\apache-maven-3.6.0`,则添加`C:\Program Files\apache-maven-3.6.0\bin`。 - **配置Maven**: 编辑`~/....

    浅谈Maven环境隔离应用

    Maven环境隔离是指在Maven项目中将不同环境下的配置分开,例如开发环境、测试环境、生产环境等,使得项目在不同的环境中可以灵活地进行配置和部署。在pom.xml文件中,可以使用profiles节点和resources节点来实现环境...

    jenkins+maven+svn+springboot实现一件打包发布

    ### Jenkins + Maven + SVN + SpringBoot 实现一键打包发布 #### 安装 Jenkins ...在实际应用中,还需要针对具体情况进行适当的调整和完善,例如增加构建失败后的邮件通知、集成持续集成/持续部署 (CI/CD) 等功能。

Global site tag (gtag.js) - Google Analytics