前段時間總結了maven一些知識點,都是概念性和理解性的描述,對於應用方面乏陳可言。java
這裏分享下我在平常項目開發中普通項目簡單的分環境打包。:)數據庫
這樣的文章不少,可是在這裏出現的纔是我最喜歡的。app
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目錄中常常放置系統配置文件和經常使用資源。
如:數據庫鏈接以及鏈接池常量配置。
FTP鏈接以及鏈接池常量配置。
Webservice Hessian HttpInvoker Rest接口URI配置。
MVC基本配置。
第三方工具常量配置。
......
還有一些系統但願經過getResource()加載的系統資源文件,如我上面描述的字體文件。
當你配置resource時,若是遺漏下部分配置文件,是不會將那些文件打包的。在install後,他們通通在WEB-INF/classes目錄下。
分環境打包分參數構建是企業級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就能夠實現分環境打包了~!@