鍍金池/ 教程/ Java/ Maven 構(gòu)建配置文件
使用Maven構(gòu)建項(xiàng)目
定制庫(kù)到Maven本地資源庫(kù)
Maven安裝配置
Maven依賴管理
使用Maven創(chuàng)建Web應(yīng)用程序項(xiàng)目
Maven項(xiàng)目文檔
Maven存儲(chǔ)庫(kù)
使用Maven創(chuàng)建Java項(xiàng)目
Maven Web應(yīng)用
Maven創(chuàng)建Java項(xiàng)目
部署基于Maven的war文件到Tomcat
定制庫(kù)到Maven本地資源庫(kù)
Maven POM
Maven啟用代理訪問(wèn)
轉(zhuǎn)換基于Maven的Java項(xiàng)目支持Eclipse IDE
Maven本地資源庫(kù)
Maven項(xiàng)目模板
Maven添加遠(yuǎn)程倉(cāng)庫(kù)
如何從Maven遠(yuǎn)程存儲(chǔ)庫(kù)下載?
Maven插件
Maven依賴機(jī)制
Maven 構(gòu)建生命周期
將項(xiàng)目安裝到Maven本地資源庫(kù)
使用Maven模板創(chuàng)建項(xiàng)目
Maven構(gòu)建自動(dòng)化
Maven中央存儲(chǔ)庫(kù)
Eclipse創(chuàng)建一個(gè)Maven Web項(xiàng)目
部署基于Maven的war文件到Tomcat
使用Maven運(yùn)行單元測(cè)試
轉(zhuǎn)換基于Maven的Java項(xiàng)目支持Eclipse IDE
轉(zhuǎn)換基于Maven的Web應(yīng)用程序支持Eclipse IDE
NetBeans IDE集成Maven
Maven中央存儲(chǔ)庫(kù)
使用Maven清理項(xiàng)目
使用Maven構(gòu)建和測(cè)試Java項(xiàng)目
Maven本地資源庫(kù)
Maven依賴機(jī)制
使用Maven創(chuàng)建Web應(yīng)用程序項(xiàng)目
使用“mvn site-deploy”部署站點(diǎn)(WebDAV例子)
Maven快照
使用Maven構(gòu)建項(xiàng)目
Maven教程
Maven POM
生成基于Maven的項(xiàng)目文檔站點(diǎn)
使用Maven運(yùn)行單元測(cè)試
Maven 構(gòu)建配置文件
Maven外部依賴
將項(xiàng)目安裝到Maven本地資源庫(kù)
Eclipse構(gòu)建Maven項(xiàng)目
啟用Maven的代理訪問(wèn)
生成基于Maven的項(xiàng)目文檔站點(diǎn)
使用Maven創(chuàng)建Java項(xiàng)目
使用“mvn site-deploy”部署站點(diǎn)(WebDAV例子)
使用Maven模板創(chuàng)建項(xiàng)目
如何從Maven遠(yuǎn)程存儲(chǔ)庫(kù)下載?
使用Maven清理項(xiàng)目
Eclispe IDE集成Maven
Maven自動(dòng)化部署
轉(zhuǎn)換基于Maven的Web應(yīng)用程序支持Eclipse IDE

Maven 構(gòu)建配置文件

什么是構(gòu)建配置文件?

生成配置文件是一組可以用來(lái)設(shè)置或覆蓋 Maven 構(gòu)建配置值的默認(rèn)值。使用生成配置文件,你可以針對(duì)不同的環(huán)境,如:生產(chǎn)V/S開(kāi)發(fā)環(huán)境自定義構(gòu)建。

配置文件中指定 pom.xml 文件使用其配置文件/配置文件元素和多種方式來(lái)觸發(fā)。配置文件修改 POM 后,在編譯的時(shí)候是用來(lái)給不同的目標(biāo)環(huán)境參數(shù)(例如,開(kāi)發(fā),測(cè)試和生產(chǎn)環(huán)境的數(shù)據(jù)庫(kù)服務(wù)器的路徑)。

生成配置文件的類型

創(chuàng)建配置文件的文件主要有三種類型:

類型 定義位置
Per Project 在項(xiàng)目中定義的POM文件, pom.xml
Per User 定義在 Maven 中的設(shè)置 XML 文件(%USER_HOME%/.m2/settings.xml)
Global 定義在 Maven 中的全局設(shè)置 xml 文件 (%M2_HOME%/conf/settings.xml)

配置文件激活

Maven 構(gòu)建配置文件的文件,可以使用以下幾種方式來(lái)激活。

  • 明確使用命令從控制臺(tái)輸入。

  • 通過(guò) Maven 設(shè)置。

  • 基于環(huán)境變量(用戶/系統(tǒng)變量)。

  • OS設(shè)置(例如,Windows系列)。

  • 呈現(xiàn)/丟失的文件。

配置文件的文件激活的例子

我們假設(shè)你的項(xiàng)目如下的目錄結(jié)構(gòu):

Maven Build Profile

現(xiàn)在下src/main/resources 有三個(gè)特定的文件:

文件名稱 描述
env.properties 如果沒(méi)有配置文件關(guān)聯(lián)則使用默認(rèn)配置
env.test.properties 當(dāng)測(cè)試配置文件用于測(cè)試配置
env.prod.properties 生產(chǎn)配置時(shí),prod信息被使用

顯式配置文件激活

在下面的例子中,我們會(huì)附加上maven-antrun-plugin:run 插件:運(yùn)行測(cè)試階段目標(biāo)。這將使我們能夠?yàn)椴煌呐渲梦募{(diào)用文本消息。將在 pom.xml 中定義不同的配置文件,并在命令控制臺(tái)使用 maven 命令將配置文件動(dòng)。

假設(shè),我們建立如下的 pom.xml 在 C:\MVN\project 文件夾。 

<project xmlns="http://maven.apache.org/POM/4.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.companyname.projectgroup</groupId>
   <artifactId>project</artifactId>
   <version>1.0</version>
   <profiles>
      <profile>
      <id>test</id>
      <build>
      <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.1</version>
            <executions>
               <execution>
                  <phase>test</phase>
                  <goals>
                     <goal>run</goal>
                  </goals>
                  <configuration>
                  <tasks>
                     <echo>Using env.test.properties</echo>
            <copy file="src/main/resources/env.test.properties" tofile
		    ="${project.build.outputDirectory}/env.properties"/>
                  </tasks>
                  </configuration>
               </execution>
            </executions>
         </plugin>
      </plugins>
      </build>
      </profile>
   </profiles>
   <dependencies>
      <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>3.8.1</version>
         <scope>test</scope>
      </dependency>
   </dependencies>
</project>

env.properties

environment=debug

env.test.properties

environment=test

env.prod.properties

environment=prod

現(xiàn)在,打開(kāi)命令控制臺(tái),進(jìn)入到包含 pom.xml 的并執(zhí)行以下 mvn 命令。通過(guò)配置文件名作為參數(shù)可使用 -P 選項(xiàng)。

C:\MVN\project>mvn test -P test
Maven會(huì)開(kāi)始處理并顯示構(gòu)建配置文件的測(cè)結(jié)
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO]    task-segment: [test]
[INFO] ------------------------------------------------------------------
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] Copying 3 resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [resources:testResources {execution: default-testResources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:MVNprojectsrc	est
esources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [surefire:test {execution: default-test}]
[INFO] Surefire report directory: C:MVNproject	argetsurefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
There are no tests to run.

Results :

Tests run: 0, Failures: 0, Errors: 0, Skipped: 0

[INFO] [antrun:run {execution: default}]
[INFO] Executing tasks
     [echo] Using env.test.properties
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: 1 second
[INFO] Finished at: Sun Jul 08 14:55:41 IST 2012
[INFO] Final Memory: 8M/64M
[INFO] ------------------------------------------------------------------

現(xiàn)在,作為一個(gè)練習(xí),可以做以下步驟:

  • 在另一個(gè)配置文件pom.xml 添加元素(復(fù)制現(xiàn)有的配置文件元素 profiles,并將其粘貼輪廓元素結(jié)束)。

  • 更新在此檔案中元素的 ID 并測(cè)試正常。

  • 更新任務(wù)部分使用 env.properties 并將 env.properties 復(fù)制到目標(biāo)目錄

  • 再次重復(fù)上述三個(gè)步驟,更新 ID 和 env.prod.properties

  • 現(xiàn)在準(zhǔn)備建立配置文件文件(正常/測(cè)試/產(chǎn)品)。

現(xiàn)在,打開(kāi)命令控制臺(tái),進(jìn)入到該文件夾包含的 pom.xml 并執(zhí)行以下 mvn 命令。通過(guò)配置文件名作為參數(shù)使用 -P 選項(xiàng)。

C:\MVN\project>mvn test -Pnormal
C:\MVN\project>mvn test -Pprod

建立檢查輸出看到它們的差別了

配置文件通過(guò)Maven設(shè)置激活

打開(kāi) Maven 的 settings.xml 文件,可在 %USER_HOME%/.m2 目錄,%USER_HOME% 表示用戶的主目錄。 settings.xml 文件如果不存在,那么就創(chuàng)建一個(gè)新的。

添加測(cè)試配置文件作為使用activeProfiles節(jié)點(diǎn)主動(dòng)配置文件,示例如下所示:

<settings xmlns="http://maven.apache.org/POM/4.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/settings-1.0.0.xsd">
   <mirrors>
      <mirror>
         <id>maven.dev.snaponglobal.com</id>
         <name>Internal Artifactory Maven repository</name>
         <url>http://repo1.maven.org/maven2/</url>
         <mirrorOf>*</mirrorOf>
      </mirror>
   </mirrors>
   <activeProfiles>
      <activeProfile>test</activeProfile>
   </activeProfiles>
</settings>

現(xiàn)在,打開(kāi)命令控制臺(tái),進(jìn)入到該文件夾包含 pom.xml 并執(zhí)行以下 mvn 命令。不要通過(guò)使用 -P 選項(xiàng)。Maven會(huì)顯示結(jié)果,測(cè)試配置文件是一個(gè)活躍的配置文件。

C:\MVN\project>mvn test

通過(guò)系統(tǒng)環(huán)境變量配置文件

現(xiàn)在從 Maven 的 settings.xml 配置文件刪除和更新 pom.xml 中提到的測(cè)試配置文件。 profile 元素添加 activation 元素,如下所示。

當(dāng)系統(tǒng)屬性 “env” 的值設(shè)置為 “test” 時(shí)指定的測(cè)試配置文件將被觸發(fā)。
創(chuàng)建一個(gè)環(huán)境變量 “env”,并設(shè)置其值為 “test” 。

<profile>
   <id>test</id>
   <activation>
      <property>
         <name>env</name>
         <value>test</value>
      </property>
   </activation>
</profile>

打開(kāi)命令控制臺(tái),進(jìn)入到包含 pom.xml 文件的文件夾下并執(zhí)行以下 mvn 命令。

C:\MVN\project>mvn test

通過(guò)操作系統(tǒng)激活配置文件

activation 元素包括 os 細(xì)節(jié),如下所示。測(cè)試配置文件文件時(shí),將觸發(fā)的系統(tǒng)是 windows XP。

<profile>
   <id>test</id>
   <activation>
      <os>
         <name>Windows XP</name>
         <family>Windows</family>
         <arch>x86</arch>
         <version>5.1.2600</version>
      </os>
   </activation>
</profile>

現(xiàn)在,打開(kāi)命令控制臺(tái),進(jìn)入到文件夾包含 pom.xml 并執(zhí)行以下 mvn 命令。不要通過(guò)使用選項(xiàng) -P 配置文件名稱。 Maven 會(huì)顯示結(jié)果:

C:\MVN\project>mvn test

配置文件激活通過(guò)現(xiàn)狀/丟失文件

載入 activation 元件包括 os 的細(xì)節(jié),如下所示。test配置文件將因 target/generated-sources/axistools/wsdl2java/com/companyname/group 缺少觸發(fā)。

<profile>
   <id>test</id>
   <activation>
      <file>
         <missing>target/generated-sources/axistools/wsdl2java/
		 com/companyname/group</missing>
      </file>
   </activation>
</profile>

現(xiàn)在,打開(kāi)命令控制臺(tái),進(jìn)入到包含 pom.xml 的文件夾并執(zhí)行以下 mvn 命令。不要使用選項(xiàng) -P傳遞配置文件名稱 。 Maven 會(huì)顯示結(jié)果,test 配置文件是一個(gè) 活動(dòng)配置文件。

C:\MVN\project>mvn test