MAVEN初級應用之分環境構建

Chapter one . Article Purpose

  前段時間總結了maven一些知識點,都是概念性和理解性的描述,對於應用方面乏陳可言。java

  這裏分享下我在平常項目開發中普通項目簡單的分環境打包。:)數據庫

  這樣的文章不少,可是在這裏出現的纔是我最喜歡的。app

 

Chapter two . Build in Pom.xml

  MAVEN應用的最佳實踐能夠說就是配置pom.xml文件的過程。maven

  這裏固然要簡單分析下pom.xml文件的構建過程。工具

  首先一個普通的項目,應該包含對成熟中間件的依賴和第三方jar包的依賴。而後我這裏忽略其餘插件形成的影響。採用maven生命週期默認插件。測試

  build過程通常發生在編譯過程當中,pom.xml文件中build節點很詳細的描述了編譯過程當中構建源碼和資源的位置和目標。字體

 

 1 <!-- 描述構建過程 -->
 2 <build>
 3         <finalName>sapphire</finalName><!-- 最終生成應用名稱 -->
 4         <defaultGoal>install</defaultGoal><!-- 發生階段 -->
 5         <directory>${basedir}/target</directory><!-- 目標路徑 -->
 6         <!-- 源路徑和編譯路徑
 7         <sourceDirectory>${basedir}/src</sourceDirectory>
 8         <outputDirectory>${basedir}/target/classes</outputDirectory>
 9         -->
10         <filters><!-- 過濾器,指定過濾屬性文件配置 -->
11             <filter>src/main/resources/env/
12                                filter-${env}.properties</filter><!-- 過濾文件 -->
13         </filters>
14         <resources><!-- -->
15             <resource>
16                 <directory>src/main/resources</directory>
17                 <filtering>true</filtering>
18                                 <!-- 將過濾文件鍵值對配置到被過濾文件中 -->
19                 <includes>
20                     <include>config.properties</include>
21                 </includes>                
22             </resource>
23                         <!-- 包含的資源 -->
24             <resource>
25                 <directory>src/main/java</directory>
26                 <includes>
27                     <include>**/*.xml</include>
28                 </includes>
29             </resource>
30             <resource>
31                 <directory>src/main/resources</directory>
32                 <includes>
33                     <include>*.*</include>
34                 </includes>
35             </resource>
36         </resources>
37     </build>        

 

  通過這樣的配置,你就能夠在mvn clean install後得到一個sapphire.war的應用。(若是應用package爲war)ui

  

  備註:過濾文件中若配置了 name=sapphire會在被過濾文件中尋找${name}並填充。
spa

  這是咱們在被過濾文件<filtering>true</filtering>中配置 name=${name}至關於name=sapphire。
插件

 

  若是你第一次看相似文章,你必定很疑惑${env}和${basedir}是什麼。

  maven運行時參數分爲兩種,一種是默認參數,如${basedir}等,還有一種就是咱們說的自定義參數啦。

  說明如何經過自定義參數分環境構建前,我想提出兩點,是我曾經遇到的坑。

過濾文件應知足開閉原則

 

  我曾經將全部資源配置的resource節點下都配置了<filtering>true</filtering>

  這致使了過濾文件對我全部的資源文件都進行過濾配置。resource資源下除了基本MVC配置外還常常存在一些經常使用的資源文件。我有一次放了一些itext加載的字體文件ttc ttl,致使過濾後字體文件無緣無故增長十幾M而失效不識別。

  因此過濾文件請配置的足夠精細。

理解resource目錄

  resource目錄中常常放置系統配置文件和經常使用資源。

  如:數據庫鏈接以及鏈接池常量配置。

    FTP鏈接以及鏈接池常量配置。

    Webservice Hessian HttpInvoker Rest接口URI配置。

    MVC基本配置。

    第三方工具常量配置。

    ......

    還有一些系統但願經過getResource()加載的系統資源文件,如我上面描述的字體文件。

    

  當你配置resource時,若是遺漏下部分配置文件,是不會將那些文件打包的。在install後,他們通通在WEB-INF/classes目錄下。

Chapter three . within Different Environment

  分環境打包分參數構建是企業級maven應用最多見的模式。

  在項目過程當中,開發環境通常分爲:

    開發環境:dev

    測試環境:test

    生產環境:pro

  大量的參數配置和IP地址配置(cas sso)會增長項目上線時的錯誤可能性。咱們這裏引入maven的運行時參數概念。

 1 <profiles>
 2         <!-- 開發環境,默認激活 -->
 3         <profile>
 4             <id>dev</id>
 5             <properties>
 6                 <env>dev</env>
 7                 <maven.test.skip>true</maven.test.skip>
 8             </properties>
 9             <activation>
10                 <activeByDefault>true</activeByDefault>
11             </activation>
12         </profile>
13         <!-- 測試環境 -->
14         <profile>
15             <id>test</id>
16             <properties>
17                 <env>test</env>
18             </properties>
19         </profile>
20         <!-- 生產環境 -->
21         <profile>
22             <id>pro</id>
23             <properties>
24                 <env>pro</env>
25             </properties>
26         </profile>
27         <!-- 生產環境 -->
28     </profiles>

 

  在剛纔配置build節點的pom.xml文件中配置如上信息。

  一目瞭然。

  當你運行mvnclean install時,將env參數添加到maven內部環境變量中。這裏配置的默認值爲dev,

  意味着咱們一開始配置的過濾文件

    src/main/resources/env/filter-${env}.properties    ---->    src/main/resources/env/filter-dev.properties

  系統將默認讀取過濾文件中的配置填充到被過濾文件config.properties中。

  當你須要測試環境和生產環境時。只須要在命令行輸出參數:

  mvn clean install -P test 或者 mvn clean install -P pro就能夠實現分環境打包了~!@

相關文章
相關標籤/搜索