1. 程式人生 > >maven的profile構建不同環境打包

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檔案,如下:

  驗證成功!