maven 使用maven profile實現多環境可移植構建
在開發過程中,我們的軟體會面對不同的執行環境,比如開發環境、測試環境、生產環境,而我們的軟體在不同的環境中,有的配置可能會不一樣,比如資料來源配置、日誌檔案配置、以及一些軟體執行過程中的基本配置,那每次我們將軟體部署到不同的環境時,都需要修改相應的配置檔案,這樣來回修改,是個很麻煩的事情。有沒有一種方法能夠讓我們不用修改配置就能釋出到不同的環境中呢?當然有,這就是接下來要做的事。
當然,這裡的前提是使用maven做為構建工具。
使用maven來實現多環境的構建可移植性,需要藉助maven提供的profile功能,通過不同的環境啟用不同的profile來達到構建的可移植性。
一、配置profile
首先是profile配置,在pom.xml中新增如下profile的配置:
<profiles>
<profile>
<!-- 本地開發環境 -->
<id>development</id>
<properties>
<profiles.active>development</profiles.active>
<deploy.url>http://host:port/manager/text</deploy.url>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<!-- 測試環境 -->
<id>test</id>
<properties>
<profiles.active>test</profiles.active>
<deploy.url>http://host:port/manager/text</deploy.url>
</properties>
</profile>
<profile>
<!-- 生產環境 -->
<id>production</id>
<properties>
<profiles.active>production</profiles.active>
<deploy.url>http://host:port/manager/text</deploy.url>
</properties>
</profile>
</profiles>
這裡定義了三個環境,分別是development(開發環境)、test(測試環境)、production(生產環境),其中開發環境是預設啟用的(activeByDefault為true),這樣如果在不指定profile時預設是開發環境。
同時每個profile還定義了兩個屬性,其中profiles.active表示被啟用的profile的名稱,deploy.url表示釋出伺服器的地址。我們需要在下面使用到這兩個屬性。
另外host和port分別是釋出伺服器的主機地址和埠號。
二、配置檔案
針對不同的環境,我們定義不同的配置檔案,而這些配置檔案都做為資原始檔放到maven工程的resources目錄下,即src/main/resources目錄下,且各個環境的配置分別放到相應的目錄下,而所有環境都公用的配置,直接放到src/main/resources目錄下即可。如下圖所示:
如圖所示,開發環境、測試環境、生產環境的配置檔案分別放到src/main/resources目錄下的development、test、production三個子目錄中,而所有環境都公用的配置檔案spring-applicationContext.xml直接放到src/main/resources目錄下。其中jdbc.properties配置資料來源、logback.xml配置日誌。
三、maven資源外掛配置
在pom中的build節點下,配置資原始檔的位置,如下所示:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<!-- 資源根目錄排除各環境的配置,使用單獨的資源目錄來指定 -->
<excludes>
<exclude>test/*</exclude>
<exclude>production/*</exclude>
<exclude>development/*</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources/${profiles.active}</directory>
</resource>
</resources>
</plugins>
</build>
首先第一個資原始檔位置src/main/resources需要排隊提各個環境的配置檔案,各個環境的配置我們在第二個節點中通過前面在profile中配置的profiles.active屬性來指定。即src/main/resources/${profiles.active}。這樣在啟用指定的profile時,會載入指定目錄下的配置檔案,如當前啟用的是production profile,那麼這個資源目錄就是src/main/resources/production。這樣就達到了不同環境載入不同配置的目的。
四、配置tomcat-maven-plugin外掛
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<version>1.2-SNAPSHOT</version>
<configuration>
<url>${deploy.url}</url>
<server>tomcat</server>
<path>/appcontext</path>
</configuration>
</plugin>
其中釋出的節點就是在前面profile中配置的deploy.url屬性,這樣不同的環境就指定了不同的釋出地址。和節點分別是釋出伺服器的使用者配置的id以及應用的context名稱。
五、構建或釋出
所有需要的配置就完成了,下面是見證奇蹟的時候了。通過在執行maven命令時指定不同的profile即可構建不同環境需要的war包或釋出到不同的環境了 。如:
mvn clean package -Pproduction即構建出生產環境需要的war包
mvn tomcat:redeploy -Ptest 即釋出到測試環境
由於預設的profile是development,所以如果我們不指定profile,那麼載入就是開發環境deployment下的配置檔案了。即我們在本地開發測試時,不用關心profile的問題。
而且本地開發時在eclipse中使用tomcat外掛來進行熱部署時也不需要額外的配置。真正的做到了根據不同環境來自動切換,即可移植的構建。
另外,在進行持續整合時,使用hudson整合maven同樣是非常非常方便的。
轉載自:使用maven profile實現多環境可移植構建
參考:
maven profiles
藉助Maven為專案劃分development,test,production環境
相關文章
- 多環境支援-Maven和Spring的ProfileMavenSpring
- maven學習(下)利用Profile構建不同環境的部署包Maven
- Maven專案多環境構建的最小配置方案指南Maven
- 使用 Maven Profile 和 Filtering 打各種環境的包MavenFilter
- Maven構建多模組工程Maven
- maven 學習總結(八)——使用Maven構建多模組專案Maven
- 使用maven的profile切換專案各環境的引數Maven
- 【Maven】構建可執行JarMavenJAR
- Maven基礎:Maven環境搭建及基本使用(1)Maven
- Maven 環境搭建Maven
- MAVEN環境搭建Maven
- Maven私服Nexus3.x環境構建操作記錄MavenS3
- maven 學習總結(三)——使用Maven構建專案Maven
- 使用Maven構建Java專案MavenJava
- Spring Boot配合Maven的Profile機制完成環境適配Spring BootMaven
- Maven 學習筆記——Maven環境配置(1)Maven筆記
- Maven學習--profileMaven
- MAVEN中的profileMaven
- Eclipse配置maven環境EclipseMaven
- Maven環境下MyBatisGenerator 配置MavenMyBatis
- eclipse 使用 maven 構建專案EclipseMaven
- 使用maven外掛構建docker映象MavenDocker
- DevOps: 使用Maven外掛實現分環境配置和版本檢查devMaven
- JDK環境配置 maven環境配置 eclipse關聯+maven+svn+tomcatJDKMavenEclipseTomcat
- 【構建】start.sh指令碼中變數被maven profile構建過程替換指令碼變數Maven
- Maven環境搭建和介紹Maven
- 搭建Maven和Nexus環境Maven
- 基於maven構建多模組化的SSM框架MavenSSM框架
- Maven 構建 Java 專案MavenJava
- Maven Web專案構建MavenWeb
- tomcat+svn+maven+jenkins實現自動構建TomcatMavenJenkins
- 可移植的python環境Python
- Maven管理SpringBoot ProfileMavenSpring Boot
- IDEA使用Maven搭建spark開發環境(scala)IdeaMavenSpark開發環境
- 首次使用ideal構建maven專案webIdeaMavenWeb
- HongHu雲架構 - maven的構建架構Maven
- eclipse中基於maven構建多模組專案EclipseMaven
- Maven構建引入本地jar包MavenJAR