ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Maven基础知识(8)- Maven Profile

2022-06-10 09:32:55  阅读:188  来源: 互联网

标签:Profile maven 基础知识 Maven MavenDemo03 test 激活


Maven 项目通常都会有多个不同的运行环境,例如开发环境,测试环境、生产环境等。在不同环境的构建过程很可能是不同的,例如数据源配置、插件、以及依赖的版本等。

将项目部署到不同的环境时,都需要修改相应的配置,这样重复的工作,不仅浪费劳动力,还容易出错。为了解决这一问题,Maven 引入了 Profile 的概念,通过它可以为不同的环境定制不同的构建过程。


1. Profile 的类型

    Profile 可以分为 3 个类型,它们的作用范围也各不相同。

类型 位置 有效范围
Per Project Maven 项目的 pom.xml 中 只对当前项目有效
Per User 用户主目录(%USER_HOME%)/.m2/settings.xml 中 对本机上该用户所有 Maven 项目有效
Global Maven 安装目录(%MAVEN_HOME%)/conf/settings.xml 中 对本机上所有 Maven 项目有效

 

2. 声明 Profile

    Maven 通过 profiles 元素来声明一组 Profile 配置,该元素下可以包含多个 profile 子元素,每个 profile 元素表示一个 Profile 配置。

    每个 profile 元素中通常都要包含一个 id 子元素,该元素是调用当前 Profile 的标识。

    Profile 的定义形式如下:

 1         <profiles>
 2             <profile>
 3                 <id>profile id</id>
 4                 ....
 5             </profile>
 6             <profile>
 7                 <id>profile id</id>
 8                 ....
 9             </profile>
10         </profiles>


    在 pom.xml 中声明的 Profile,由于其能够随着 pom.xml 一起存在,它被提交到代码仓库中,被 Maven 安装到本地仓库或远程仓库中,所以它能够修改或增加很多 POM 元素,其中常用的元素如下表。

    在 setting.xml 中声明的 Profile 是无法保证能够随着 pom.xml 一起被分发的,因此 Maven 不允许用户在该类型的 Profile 修改或增加依赖或插件等配置信息,它只能声明以下范围较为宽泛的元素。

        (1) repositories:仓库配置。
        (2) pluginRepositories:插件仓库配置。
        (3) properties:键值对,该键值对可以在 pom.xml 中使用。

    除此之外,Profile 中还可以声明一些其他的 POM 元素,但不同位置的 Profile 所能声明的 POM 元素也是不同的。

        (1) 一级元素 <project> 下的 Profile 支持的子元素

            repositories    
            pluginRepositories    
            dependencies    
            plugins    
            dependencyManagement    
            distributionManagement    
            modules    
            properties    
            reporting
            build

        (2) 二级元素 <build> 下的 Profile 支持的子元素

            plugins
            defaultGoal
            resources
            testResources
            directory
            filters
            finalName
            pluginManagement
            filters           


3. 激活 Profile

    Profile 能够在项目构建时,修改 POM 中配置或者添加一些额外的配置元素。用户可以通过多种方式激活 Profile,以实现不同环境使用不同的配置,执行不同的构建过程。

    Profile 可以通过以下 6 种方式激活:

        (1) 命令行激活
        (2) settings.xml 文件显示激活
        (3) 系统属性激活
        (4) 操作系统环境激活
        (5) 文件存在与否激活
        (6) 默认激活      

    示例

    本文在 “Maven基础知识(4)- Maven 插件、Maven Archetype (原型/模板)、Maven SNAPSHOT (快照)” 里 MavenDemo03 项目基础上,分别对以上 6 种激活方式进行讲解。

    1) 修改 MavenDemo03 项目

        在 src/main/resources 目录(手动创建该目录,下同)下创建 3 个环境 properties 配置文件。

            env.properties:默认配置文件
            env.test.properties:测试环境配置文件
            env.prod.properties:生产环境配置文件

            注:在三个配置文件添加不同的配置信息。

        在 pom.xml 里定义三个不同的 Profile,并将 maven-antrun-plugin:run 目标绑定到 default 生命周期的 test 阶段上,以实现在不同的 Profile 中进行不同的操作。

  1             <project xmlns="http://maven.apache.org/POM/4.0.0"
  2                     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3                     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
  4                                         https://maven.apache.org/xsd/maven-4.0.0.xsd">
  5 
  6                 <modelVersion>4.0.0</modelVersion>
  7                 <groupId>com.example</groupId>
  8                 <artifactId>MavenDemo03</artifactId>
  9                 <version>1.0-SNAPSHOT</version>
 10                 <packaging>jar</packaging>
 11 
 12                 <dependencies>
 13                     <dependency>
 14                         <groupId>junit</groupId>
 15                         <artifactId>junit</artifactId>
 16                         <version>3.8.1</version>
 17                         <scope>compile</scope>
 18                     </dependency>
 19                 </dependencies>
 20 
 21                 <profiles>
 22 
 23                     <!-- 默认环境配置 -->
 24                     <profile>
 25                         <id>default</id>
 26                         <build>
 27                             <plugins>
 28                                 <plugin>
 29                                     <groupId>org.apache.maven.plugins</groupId>
 30                                     <artifactId>maven-antrun-plugin</artifactId>
 31                                     <version>1.8</version>
 32                                     <executions>
 33                                         <execution>
 34                                             <phase>test</phase>
 35                                             <goals>
 36                                                 <goal>run</goal>
 37                                             </goals>
 38                                             <configuration>
 39                                                 <tasks>
 40                                                     <echo>使用 env.properties,将其复制到 classpath</echo>
 41                                                     <copy file="src/main/resources/env.properties" tofile="${project.build.outputDirectory}/user.properties"/>
 42                                                 </tasks>
 43                                             </configuration>
 44                                         </execution>
 45                                     </executions>
 46                                 </plugin>
 47                             </plugins>
 48                         </build>
 49                     </profile>
 50 
 51                     <!-- test 环境配置 -->
 52                     <profile>
 53                         <id>test</id>
 54                         <activation>
 55                             <property>
 56                                 <name>env</name>
 57                                 <value>test</value>
 58                             </property>
 59                         </activation>
 60                         <build>
 61                             <plugins>
 62                                 <plugin>
 63                                     <groupId>org.apache.maven.plugins</groupId>
 64                                     <artifactId>maven-antrun-plugin</artifactId>
 65                                     <version>1.8</version>
 66                                     <executions>
 67                                         <execution>
 68                                             <phase>test</phase>
 69                                             <goals>
 70                                                 <goal>run</goal>
 71                                             </goals>
 72                                             <configuration>
 73                                                 <tasks>
 74                                                     <echo>使用 env.test.properties,将其复制到 classpath</echo>
 75                                                     <copy file="src/main/resources/env.test.properties" tofile="${project.build.outputDirectory}/user.properties"/>
 76                                                 </tasks>
 77                                             </configuration>
 78                                         </execution>
 79                                     </executions>
 80                                 </plugin>
 81                             </plugins>
 82                         </build>
 83                     </profile>
 84 
 85                     <!-- 生产环境配置 -->
 86                     <profile>
 87                         <id>prod</id>
 88                         <build>
 89                             <plugins>
 90                                 <plugin>
 91                                     <groupId>org.apache.maven.plugins</groupId>
 92                                     <artifactId>maven-antrun-plugin</artifactId>
 93                                     <version>1.8</version>
 94                                     <executions>
 95                                         <execution>
 96                                             <phase>test</phase>
 97                                             <goals>
 98                                                 <goal>run</goal>
 99                                             </goals>
100                                             <configuration>
101                                                 <tasks>
102                                                     <echo>使用 env.prod.properties,将其复制到 classpath</echo>
103                                                     <copy file="src/main/resources/env.prod.properties" tofile="${project.build.outputDirectory}/user.properties"/>
104                                                 </tasks>
105                                             </configuration>
106                                         </execution>
107                                     </executions>
108                                 </plugin>
109                             </plugins>
110                         </build>
111                     </profile>
112                 </profiles>
113             </project>


    2) 命令行激活
        在命令行中使用 mvn 命令行参数 -P 加上 Profile 的 id 来激活 Profile,多个 id 之间使用逗号隔开。

        打开 cmd 命令行窗口,进入 D:\Workshop\maven\MavenDemo03 目录,执行如下命令:

            D:\Workshop\maven\MavenDemo03>mvn clean test -Ptest

        显示结果如下:

            ...

            [INFO]
            [INFO] --- maven-antrun-plugin:1.8:run (default) @ MavenDemo03 ---
            [WARNING] Parameter tasks is deprecated, use target instead
            [INFO] Executing tasks

            main:
                [echo] 使用 env.test.properties,将其复制到 classpath
                [copy] Copying 1 file to D:\Workshop\maven\MavenDemo03\target\classes
            [INFO] Executed tasks
            [INFO] ------------------------------------------------------------------------
            [INFO] BUILD SUCCESS
            [INFO] ------------------------------------------------------------------------
            [INFO] Total time:  5.936 s
            [INFO] Finished at: 2022-06-07T18:55:09+08:00
            [INFO] ------------------------------------------------------------------------


    3) settings.xml 文件显示激活

        在本地仓库的 settings.xml 文件中添加如下配置,激活指定的 Profile。

1     <settings>
2 
3       ...
4           <activeProfiles>
5                <activeProfile>test</activeProfile>
6           </activeProfiles>
7 
8     </settings>

 

        Maven 本地仓库的 settings.xml 文件,默认位于 %USER_HOME%/.m2 目录下,本文所在路径是 C:\Applications\java\apache-maven-3.8.1\conf\settings.xml。


        打开 cmd 命令行窗口,进入 D:\Workshop\maven\MavenDemo03 目录,执行如下命令:

            D:\Workshop\maven\MavenDemo03>mvn clean test

        显示结果如下:

            略

    4) 系统属性激活

        用户可以配置当某个系统属性存在时,激活指定的 Profile。例如,在 id 为 prod 的 profile 元素中添加以下配置,表示当系统属性 user 存在,且值等于 prod 时,自动激活该 Profile。

 1     <profile>
 2 
 3       <id>prod</id>
 4           <activation>
 5             <property>
 6                  <name>user</name>
 7                    <value>prod</value>
 8              </property>
 9           </activation>
10 
11       ...
12 
13     </profile>

 

        打开 cmd 命令行窗口,进入 D:\Workshop\maven\MavenDemo03 目录,执行如下命令:


            D:\Workshop\maven\MavenDemo03>mvn clean test -Duser=prod

        显示结果如下:

            略

    5) 操作系统环境激活

        Maven 还可以根据操作系统环境自动激活指定的 Profile。例如,将以下配置(本地计算机操作系统环境信息)添加到 pom.xml 文件中的 id 为 default 的 Profile 中。

 1   <profile>
 2     <id>default</p>
 3        <activation>
 4             <os>
 5                 <name>Windows 10</name>
 6                 <family>Windows</family>
 7                 <arch>amd64</arch>
 8                 <version>10.0</version>
 9             </os>
10         </activation>
11         ...
12 
13   </profile>

 

        打开 cmd 命令行窗口,进入 D:\Workshop\maven\MavenDemo03 目录,执行如下命令:


            D:\Workshop\maven\MavenDemo03>mvn clean test

        显示结果如下:

            略

    6) 文件存在与否激活

        Maven 可以根据某些文件存在与否,来决定是否激活 Profile。例如,在 id 为 prod 的 Profile 中添加以下配置,该配置表示当 env.prod.properties 文件存在,且 env.test.properties 文件不存在时,激活该 Profile。

 1             <profile>
 2                 <id>prod</id>
 3                 <activation>
 4                     <file>
 5                         <exists>./src/main/resources/env.prod.properties</exists>
 6                         <missing>./src/main/resources/env.test.properties</missing>
 7                     </file>
 8                 </activation>
 9                 ...
10             
11             </profile>


        打开 cmd 命令行窗口,进入 D:\Workshop\maven\MavenDemo03 目录,执行如下命令:

            D:\Workshop\maven\MavenDemo03>mvn clean test

        显示结果如下:

            略

    7) 默认激活

        可以在声明 Profile 时,指定其默认激活。例如,在 id 为 default 的 Profile 中添加以下配置,指定该 Profile 默认激活。

1             <profile>
2                 <id>default</id>
3                 <activation>
4                     <activeByDefault>true</activeByDefault>
5                 </activation>
6                 ...
7             
8             </profile>


        打开 cmd 命令行窗口,进入 D:\Workshop\maven\MavenDemo03 目录,执行如下命令:

            D:\Workshop\maven\MavenDemo03>mvn clean test

        显示结果如下:

            略


标签:Profile,maven,基础知识,Maven,MavenDemo03,test,激活
来源: https://www.cnblogs.com/tkuang/p/16362003.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有