使用maven管理項目有一個好處是就是能夠針對不一樣的環境使用不一樣的編譯打包設置,方便了多環境下的打包部署,通常咱們開發項目都會有至少開發環境和正式環境兩個,針對這兩個環境的配置信息也會有所不一樣,好比數據庫的配置等。咱們能夠使用maven的profile定義來進行區分,好比咱們在項目的pom文件中定義以下片斷:mysql
<project>sql
<modelVersion>4.0.0</modelVersion>數據庫
<groupId>cc.mzone</groupId>maven
<artifactId>myjar</artifactId>ui
<version>0.1</version>url
<packaging>jar</packaging>spa
<build>orm
<resources>開發
<resource>部署
<directory>src/main/resources</directory>
<includes>
<include>*.*</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
<properties>
<jdbc.url>jdbc:mysql://localhost:3306/abc</jdbc.url>
<jdbc.username>root</jdbc.username>
<jdbc.password>root</jdbc.password>
</properties>
<profiles>
<profile>
<id>product</id>
<properties>
<jdbc.url>jdbc:mysql://localhost:3306/abc123</jdbc.url>
<jdbc.username>rootuser</jdbc.username>
<jdbc.password>rootpwd</jdbc.password>
</properties>
</profile>
</profiles>
</project>
這裏咱們在pom文件中定義了數據庫的相關配置,同時定義了一個profile,其id爲product,同時在這個profile中也定義了數據庫的相關配置。這樣咱們使用mvn package命令時就能夠使用默認的jdbc設置,當咱們使用mvn package -P product時maven就會自動使用id爲product的profile中的數據庫配置,這個是maven讀取屬性配置文件的覆蓋。
而後再看pom文件中的resources段的配置:
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>*.*</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
其中最重要的是<filtering>true</filtering>這段,這個配置的意思是過濾上面指定屬性文件中的佔位符,佔位符是${變量名稱}這樣的形式,maven會自動讀取配置文件,而後解析其中的佔位符,使用上面pom文件中定義的屬性進行替換。咱們能夠在src/main/resources下定義一個jdbc.properties配置文件,內容以下:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=${jdbc.url}
jdbc.username=${jdbc.username}
jdbc.password=${jdbc.password}
執行的效果以下:
## 使用默認的配置信息
mvn clean package
## 使用product環境的配置信息
mvn clean package -P product
分兩次執行上面的命令後,而後到項目的target目錄下查看打包後的結果,能夠看到jdbc.properties文件的內容隨着打包的參數不一樣而變化了,從而也就實現了咱們多環境的配置自動打包了。