maven的profile構建不同環境打包
1.首先建立maven工程(略),專案結構如下
2.pom檔案配置
2.1 新增<profiles標籤>,在<profiles>分別定義各個<profile>用來配置開發,測試以及生產的全域性變數,程式碼如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>tca</groupId> <artifactId>maven</artifactId> <version>0.0.1-SNAPSHOT</version> <properties> <junit.version>4.12</junit.version> <slf4j.version>1.7.7</slf4j.version> <spring.version>4.3.8.RELEASE</spring.version> </properties> <!-- 整個專案都需要依賴的jar包 --> <dependencies> <!-- 單元測試 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> </dependency> <!-- 日誌 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> </dependency> <!-- Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-oxm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> </dependencies> <profiles> <profile> <!-- 本地環境 --> <id>dev</id> <properties> <test.username>dev</test.username> <test.password>dev</test.password> </properties> <!-- 預設啟用本環境 --> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <!-- 測試環境 --> <id>test</id> <properties> <test.username>test</test.username> <test.password>test</test.password> </properties> </profile> <profile> <!-- 生產環境 --> <id>pro</id> <properties> <test.username>pro</test.username> <test.password>pro</test.password> </properties> </profile> </profiles> <build> <!-- 所有子專案都需要 --> <plugins> <!-- JDK版本 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.0</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <!-- maven外掛 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <testFailureIgnore>true</testFailureIgnore> <!-- 跳過單元測試 --> <skip>true</skip> </configuration> </plugin> </plugins> <resources> <resource> <directory>${project.basedir}/src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build> </project>
注:
1.為保證專案完整性,所以將整個pom檔案貼上上來
2.<profiles>標籤是定義在<project>下的子標籤,我們在<profiles>裡分別定義三個<profile>標籤,分別代表三個環境,開發,測試和線上,在<profile>標籤下我們通常新增下列幾個子標籤:
<id>標籤表示當前環境的唯一識別符號,之後使用maven打包時具體選擇哪個<profile>環境需要用到該引數
<properties>標籤用於定義該環境下的全域性變數(<key>value</key>格式)
<activation>標籤用於定義預設打包環境,配置如下(表示打包時預設選擇當前<profile>):
<activation>
<activeByDefault>true</activeByDefault>
</activation>
2.2 <resources>標籤用於指定上述<profile>中定義的全域性變數可被哪些資源引用,配置如下:
<resources> <resource> <directory>${project.basedir}/src/main/resources</directory> <filtering>true</filtering> </resource> </resources>
如上圖所示,表示可以被src/main/resources類路徑下的資源引用。因為正常我們在.properties配置檔案中引用。${project.basedir}表示專案根目錄,即pom檔案所在的目錄
3.實際應用
一般,我們在各個<profile>中定義的全域性變數的<key>值是相同的,只是value不同,如程式碼:
我們在properties檔案中進行引用, 使用${}符號,${}內的值就是上述全域性變數的key,這樣我們在打包時就會根據所選的<profile>模板來引用不同的值:
4.打包
切換到專案根目錄下,即pom檔案所在的目錄,使用命令:
<!-- profile-id代表上述定義profile時下的<id>標籤的值 -->
mvn clean package -P profile-id
如,打包為生產環境,只需要 mvn clean package -P pro
5.驗證
切換到專案根目錄下,使用mvn clean package -P pro命令打包,用解壓器開啟打包之後的jar包(jar包位於專案根目錄下的target目錄下),觀察test.properties檔案,如下:
驗證成功!