maven profile多環境自動切換配置,配置分離,排除文件


痛點:

  在java開發的過程中,我們經常要面對各種各樣的環境,比如開發環境,測試環境,正式環境,而這些環境對項目的需求也不相同。

  在此之前,我們往往需要手動去修改相對應的配置文件然后打成war,才能部署到相應的環境上。

  但是這樣很容易出現問題,因為很容易出現少改或者漏改,造成不必要的麻煩

幻想:

  要是有一種東西,能讓我們打war的時候指定一個參數,就能自動把項目編譯成對應環境的war,那該有多幸福啊!!!

結果:這樣的東西還真有,那就是maven-profile

一、項目src/main/resources目錄下建立相對應的目錄

比如筆者的

 我建立了三個目錄,分別是:dev,test,pro分別表示開發環境,測試環境,生產環境。當然還可能有更多的環境。針對不同的環境,我們的配置文件可能會有不同的設置,比如我的需求是,三個環境的項目常量設置,數據庫連接設置,log設置都可能不同。

那我就分別在三個文件中配置了不同設置,在外面也有三個相對應的文件,其實在開發的過程中外面的三個和dev里面的三個應該是相同的。

公共配置直接放到src/main/resources下

二、POM中的配置

 1  <profiles>
 2         <!--本地開發環境-->
 3         <profile>
 4             <id>dev</id>
 5             <properties>
 6                 <profiles.active>dev</profiles.active>
 7             </properties>
 8             <activation>
 9                 <activeByDefault>true</activeByDefault>
10             </activation>
11         </profile>
12         <!--測試環境-->
13         <profile>
14             <id>test</id>
15             <properties>
16                 <profiles.active>test</profiles.active>
17             </properties>
18         </profile>
19         <!--生產環境-->
20         <profile>
21             <id>pro</id>
22             <properties>
23                 <profiles.active>pro</profiles.active>
24             </properties>
25         </profile>
26     </profiles>
27 
28 <!--build部分-->
29     <build>
30         <finalName>xxx</finalName>
31         <sourceDirectory>src/main/java</sourceDirectory>
32         <testSourceDirectory>src/test/java</testSourceDirectory>
33         <resources>
34             <resource>
<!--項目的默認資源目錄,但是要排除不必要的文件,想要指定加入的再下面的resource指定-->
35                 <directory>${project.basedir}/src/main/resources</directory>
36                 <excludes>
37                     <exclude>dbpool/**</exclude>
38                     <exclude>dev/*</exclude>
39                     <exclude>mbg/*</exclude>
40                     <exclude>pro/*</exclude>
41                     <exclude>test/*</exclude>
42                     <exclude>readme.txt</exclude>
43                 </excludes>
44             </resource>
45             <resource>
46                 <directory>${project.basedir}/src/main/resources/${profiles.active}</directory>
47                 <filtering>true</filtering>
48             </resource>
49             <resource>
50                 <directory>${project.basedir}/src/main/java</directory>
51                 <includes>
52                     <include>**/*.xml</include>
53                 </includes>
54                 <!--是否替換資源中的屬性-->
55                 <filtering>true</filtering>
56             </resource>
57         </resources>
58 ...
59 </build>

 

3~26:我們設置了三個profile分別對應目錄中的三個開發環境。

8~10:開發環境是默認激活的(activeByDefault為true),這樣如果在不指定profile時默認是開發環境

34~44:項目的默認資源目錄,但是要排除不必要的文件,想要指定加入的再下面的resource指定

45~48:根據當前激活的profile來把指定的配置文件加載到classpath下!!橋黑板:filtering標簽一定要有,他的作用就是把src/main/resources的文件替換為dev|test|pro下的文件。(47行)

三、項目編譯生成

所有需要的配置就完成了,通過在運行maven命令時指定不同的profile即可構建不同環境需要的war包或發布到不同的環境了 。如:

clean package -Ppro即構建出生產環境需要的war包

由於默認的profile是dev,所以如果我們不指定profile,那么加載就是開發環境dev下的配置文件了。即我們在本地開發測試時,不用關心profile的問題。

雙擊666,可以愉快的開發了,環境切換,游刃有余。

更詳細的介紹:http://maven.apache.org/pom.html#Profiles

 

新增筆記:

在idea中設置maven執行命令,若找不到,路徑如下:File->Settings->Keymap->Main menu->Run->Edit Confiturations...也可以自己添加一個快捷鍵,其實就在我們運行tomcat的的那個下拉按鈕下。eclipse的請自行百度 “eclipse執行maven命令

選好項目目錄,配置好Commang line。然后,我們打包的時候就可以點擊上面的運行按鈕了,愉快的不要不要的。

題外話:在使用maven-3.3.3的打包的時候,有時候會出現如下錯誤

ATAL ERROR in native method: JDWP on raw monitor enter, jvmtiError=JVMTI_ERROR_INVALID_ENVIRONMENT(116) 
JDWP exit error JVMTI_ERROR_WRONG_PHASE(112): on getting class status [../../../src/share/back/util.c:1265] 
JDWP exit error JVMTI_ERROR_INVALID_ENVIRONMENT(116): on raw monitor enter [../../../src/share/back/util.c:1034] 
ERROR: JDWP unable to dispose of JVMTI environment: JVMTI_ERROR_INVALID_ENVIRONMENT(116) 

 

 其實不影響項目的打包,這是maven,或者是jvm的bug,比如

筆者在更換至maven-3.5.0之后,問題解決!

四:排除WEB-INF下面的文件

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<warSourceExcludes>WEB-INF/list.html</warSourceExcludes>
</configuration>
</plugin>

碼字不易,尊重原創,轉載請注明:http://www.cnblogs.com/adeng/p/7059588.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM