maven的profile构建不同环境打包

Posted HelloWorld搬运工

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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不同,如代码:

maven的profile构建不同环境打包

我们在properties文件中进行引用, 使用${}符号,${}内的值就是上述全局变量的key,这样我们在打包时就会根据所选的<profile>模板来引用不同的值: 

maven的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文件,如下:

maven的profile构建不同环境打包


以上是关于maven的profile构建不同环境打包的主要内容,如果未能解决你的问题,请参考以下文章

maven项目之Profile---不同环境打包不同配置

maven profile实现多环境打包

maven属性资源过滤profile不同环境构建项目

使用maven profile实现多环境配置相关打包

Eclipse Maven profiles 多环境配置,测试环境与开发环境分开打包

maven学习利用Profile构建不同环境的部署包