1. 程式人生 > >Maven打包時自動選擇不同的配置(利用profile和filter外掛)

Maven打包時自動選擇不同的配置(利用profile和filter外掛)

專案開發時,一般都會部署到兩套以上不同的環境中(比如開發環境和生產環境)。打包的時候需要修改配置檔案中的很多資訊、或替換不同的配置檔案,很容易出錯而且不方便。下面舉例介紹如何利用Maven的profile和filter外掛來解決這個問題——為不同環境打包前自動修改配置檔案中的內容:

假設有兩個環境:
  • 開發環境
  • 生產環境
配置檔案目錄為src/main/resources
第一步為兩個不同的環境建立兩個配置檔案,作為其他配置檔案實際內容的來源
  • development.properties,內容為:
db.url=development-url
  • production.properties,
    內容為:
db.url=production-url
第二步在其他公用配置檔案(.properties, .xml, etc.)中,使用${}來引用上面定義的值,如:
db.url=${db.url}

<bean id="testService" class="com.xjj.service.impl.TestServiceImpl">
    <property name="url" value="${db.url}"></property>
</bean>

第三步在POM檔案中定義兩個profile
<project>
...
 <!-- 選擇不同的屬性為resource中的變數賦值。development:開發環境,production:生產環境 -->
 <profiles>
      <profile>
           <id>development</id>
           <activation>
                <activeByDefault>true</activeByDefault>
           </activation>
           <build>
                <filters>
                     <filter>src/main/resources/profile/development.properties</filter>
                </filters>
           </build>
      </profile>
      <profile>
           <id>production</id>
           <build>
                <filters>
                     <filter>src/main/resources/profile/production.properties</filter>
                </filters>
           </build>
      </profile>
 </profiles>
...
</project>

第四步在POM檔案中定義需要被替換的檔案,並使用filter
<project>
...
    <build>
    ...
        <!-- 啟用filtering功能為resources中的變數賦值 -->
          <resources>
               <resource>
                    <directory>src/main/resources</directory>
                    <filtering>true</filtering>
               </resource>
          </resources>
    </build>
</project>

第五步:在MyEclipse中新增兩個Maven Build快捷方式 Run -> Run Configurations... -> Maven Build Base directory: Browse Workspace...選擇當前專案 Goals中填入:
  • 開發環境:package -Pdevelopment
  • 生產環境:package -Pproduction
如果要先clean並且跳過測試
  • 開發環境:clean package -Pdevelopment -Dmaven.test.skip=ture
  • 生產環境:clean package -Pproduction -Dmaven.test.skip=ture

第六步:打包 分別執行這兩個Maven Build,檢視生成的jar或war包,就可以看到第二步配置檔案中的變數已經被替換成development.properties或production.properties中的內容了。
注1:如果其他目錄中有需要打包的xml檔案(比如MyBatis的mapper.xml檔案),需要另外指定,不然Maven預設不會打包: <resources>
    ……
    <resource>
        <directory>src/main/java</directory>
        <includes>
            <include>**/*.properties</include>
            <include>**/*.xml</include>
        </includes>
        <filtering>false</filtering>
    </resource>
</resources>

注2:如果resources資料夾中有二進位制檔案,需要排除在filter之外(先exclude,後面再單獨在一個resource中宣告),不然可能會搞壞它:
<resources>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
        <excludes>
            <exclude>**/*.p12</exclude>
        </excludes>
   </resource>
   <resource>
       <directory>src/main/resources</directory>
        <filtering>false</filtering>
        <includes>
             <include>**/*.p12</include>
        </includes>
    </resource>
</resources>

具體的全部程式碼請參考:https://github.com/xujijun/MyJavaStudio

(原創文章,轉載請註明轉自Clement-Xu的部落格:http://blog.csdn.net/clementad/article/details/43603441)