Maven實現多環境打包

  在開發的過程當中,常常須要面對不一樣的運行環境(開發環境、測試環境、生產環境、內網環境、外網環境等等),在不一樣的環境中,相關的配置通常不同,好比數據源配置、日誌文件配置、以及一些軟件運行過程當中的基本配置。每次在不一樣環境部署程序時,都須要修改相應的配置文件,使之完成環境的配置。這麼作存在一個比較大的問題:每次修改配置很是麻煩,並且配置錯誤會產生不可預估的影響,好比,在發佈生產環境時用的開發環境的配置還好,但若是在開發環境下用生產環境的數據,將會形成生產數據的污染,致使生產環境崩潰。
    目前JAVA相關的項目基本都是使用Maven來進行構建。在maven中實現多環境的構建可移植性須要使用profile,經過不一樣的環境激活不一樣的profile來達到構建的可移植性。

1、POM中profile的配置

首先是profile配置,在pom.xml中添加以下profile的配置:spring

<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時默認是開發環境。tomcat

同時每一個profile還定義了兩個屬性,其中profiles.active表示被激活的profile的名稱,deploy.url表示發佈服務器的地址。咱們須要在下面使用到這兩個屬性。服務器

另外host和port分別是發佈服務器的主機地址和端口號app

2、配置文件

針對不一樣的環境,咱們定義不一樣的配置文件,而這些配置文件都作爲資源文件放到maven工程的resources目錄下,即src/main/resources目錄下,且各個環境的配置分別放到相應的目錄下,而全部環境都公用的配置,直接放到src/main/resources目錄下便可。以下圖所示:
eclipse

 

如圖所示,開發環境、測試環境、生產環境的配置文件分別放到src/main/resources目錄下的development、test、production三個子目錄中,而全部環境都公用的配置文件spring-applicationContext.xml直接放到src/main/resources目錄下。其中jdbc.properties配置數據源、logback.xml配置日誌。maven

3、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>  
</build> 

首先第一個資源文件位置src/main/resources須要排隊提各個環境的配置文件,各個環境的配置咱們在第二個<resource>節點中經過前面在profile中配置的profiles.active屬性來指定。ui

即src/main/resources/${profiles.active}。這樣在激活指定的profile時,會加載指定目錄下的配置文件,如當前激活的是production profile,那麼這個資源目錄就是src/main/resources/production。url

這樣就達到了不一樣環境加載不一樣配置的目的。spa

4、配置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>  

其中發佈的<url>節點就是在前面profile中配置的deploy.url屬性,這樣不一樣的環境就指定了不一樣的發佈地址。

<server>和<path>節點分別是發佈服務器的用戶配置的id以及應用的context名稱。

5、構建或發佈

全部須要的配置就完成了,下面是見證奇蹟的時候了。經過在運行maven命令時指定不一樣的profile便可構建不一樣環境須要的war包或發佈到不一樣的環境了 。如:

mvn clean package -Pproduction即構建出生產環境須要的war包

mvn tomcat:redeploy -Ptest 即發佈到測試環境

 

因爲默認的profile是development,因此若是咱們不指定profile,那麼加載就是開發環境deployment下的配置文件了。即咱們在本地開發測試時,不用關心profile的問題。

並且本地開發時在eclipse中使用tomcat插件來進行熱部署時也不須要額外的配置。真正的作到了根據不一樣環境來自動切換,便可移植的構建。

 

 

另外,在進行持續集成時,使用Jenkins集成maven一樣是很是很是方便的。

相關文章
相關標籤/搜索