1. 程式人生 > >Maven根據不同的環境打包不同的配置

Maven根據不同的環境打包不同的配置

key font skip 過程 value resources ack policy com

前言:

在開發過程中,我們的軟件會面對不同的運行環境,比如開發環境、測試環境、生產環境,而我們的軟件在不同的環境中,有的配置可能會不一樣,比如數據源配置、日誌文件配置等等。

那麽就需要借助maven提供的profile功能,通過不同的環境激活不同的profile來實現“maven根據不同的運行環境,打包不同的配置文件”的目的。

一、原理

利用filter實現對資源文件(resouces)過濾

maven filter可利用指定的xxx.properties中對應的key=value對資源文件中的${key}進行替換,最終把你的資源文件中的username=${key}替換成username=value

利用profile來切換環境



maven profile可使用操作系統信息,jdk信息,文件是否存在,屬性值等作為依據,來激活相應的profile,也可在編譯階段,通過mvn命令加參數 -PprofileId 來手工激活使用對應的profile
結合filter和profile,我們就可以方便的在不同環境下使用不同的配置

二、pom配置

 <profiles> 
    <profile> 
      <id>cluster</id>  
      <activation> 
        <property> 
          <
name>node</name> </property> </activation> <build> <finalName>ota</finalName> <filters> <filter>${project.basedir}/src/cluster/nodes/${node}.properties</filter> </filters> <
resources> <resource> <targetPath>${project.basedir}/target/${project.build.finalName}</targetPath> <filtering>true</filtering> <directory>${project.basedir}/src/main/sca-resources</directory> <includes> <include>META-INF/**/*.composite</include> <include>definitions.xml</include> </includes> </resource> <resource> <targetPath>${project.basedir}/target/${project.build.finalName}/WEB-INF/classes</targetPath> <filtering>true</filtering> <directory>${project.basedir}/src/main/resources</directory> <includes> <include>**/*.xml</include> <include>**/*.properties</include> <include>policy</include> </includes> </resource> </resources> </build> </profile> </profiles>
  • activation:在activation元素中指定激活條件
  • property:當maven檢測到property(pom中如${name}這樣的)profile將被激活 無論取任何值,都會觸發

執行打包命令

手工編譯,打包:maven clean package -Ptest 激活id="test"的profile

install 和 package命令的區別

1.install:打包好的 jar 包會安裝到本地的 maven 倉庫中,使用的配置是默認的配置,供其他項目使用
2.package 指定參數打包:clean package -Dmaven.test.skip=true -Pprod 這種方式就是指定了打包的參數,並且打包後的文件存放到項目的 target 目錄下。

Maven根據不同的環境打包不同的配置