喜歡E文的直接看原文:https://maven.apache.org/guid…
同一專案為不同環境構建總是個麻煩事。你可能有測試和生產伺服器,也可能有一組伺服器執行同一個應用,但使用不同的配置引數。本指南意在使用側面(profiles) 來對專案進行指定環境打包。可以參考Profile概念的介紹以瞭解更多。
提示:
本指南假設你對 Maven 2 有基本的瞭解。會有簡單的maven設定介紹。簡單是指你的專案配置裡僅有少數檔案根據環境的不同有所變化。兩維甚至多維度配置變化時有其他更好的解決方法。
這個例子中採用標準的目錄結構:
pom.xml
src/
main/
java/
resources/
test/
java/
在 src/main/resources 下有三個檔案:
- environment.properties – 這是預設配置並會打包到最終釋出包裡.
- environment.test.properties – 這是用於測試的配置方案.
- environment.prod.properties – 這是與測試方案類似用於生產環境的配置.
在專案描述符裡, 你需要配置不同的profiles. 這裡只列出的測試用的profile.
<profiles>
<profile>
<id>test</id>
<build>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>test</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<delete file="${project.build.outputDirectory}/environment.properties"/>
<copy file="src/main/resources/environment.test.properties"
tofile="${project.build.outputDirectory}/environment.properties"/>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<classifier>test</classifier>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
.. Other profiles go here ..
</profiles>
這段程式碼裡配置了三件事:
- 配置了 antrun 外掛在測試階段執行,將拷貝
environment.test.properties
檔案到environment.properties
. - 配置了在編譯測試包和生成包時測試外掛跳過所有測試. 這可能對你有用,因為你可能不想對生產環境進行測試。
- 配置了JAR外掛用於建立帶test修飾標識的JAR包。
啟用執行這個profile辦法是 mvn -Ptest install
,除正常步驟還將執行Profile裡定義的步驟. 你將得到兩人個包, “foo-1.0.jar” 和 “foo-1.0-test.jar”. 這兩個包是一樣的.
小心:
Maven 2 不能只編有修飾符的包. (i.e. 他非要生成主包) 所以搞出來倆一樣的. JAR外掛需要改進啊。能編到不同目錄下會更好。
使用刪除任務看上去有些怪異,只是為了確保能拷貝檔案。拷貝任務會看原始檔和目標檔案的時間戳, 只拷貝和上次不同的檔案.
編譯後配置檔案會在 target/classes 中, 他不會被覆蓋,因為resources外掛也使用同樣的時間戳檢查, 所以按這個profile構建時總要清理.
所以強制你每次構建時只能為單一環境構建一個單一的包.然後 ”mvn clean” 如果你更改了profile選項引數. 要不的話你會把不同環境的配置混到一塊去啦。
文獻: