Maven專案多環境構建的最小配置方案指南

Yujiaao發表於2018-01-27

喜歡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>

這段程式碼裡配置了三件事:

  1. 配置了 antrun 外掛在測試階段執行,將拷貝environment.test.properties檔案到 environment.properties.
  2. 配置了在編譯測試包和生成包時測試外掛跳過所有測試. 這可能對你有用,因為你可能不想對生產環境進行測試。
  3. 配置了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選項引數. 要不的話你會把不同環境的配置混到一塊去啦。

文獻:

側面構建入門
標準目錄結構

相關文章