首页 > 其他分享 >Maven学习-Profile详解

Maven学习-Profile详解

时间:2022-11-24 21:02:23浏览次数:36  
标签:Profile profile 定义 xml Maven 详解 ... profileTest1 激活


Profile能让你为一个特殊的环境自定义一个特殊的构建;profile使得不同环境间构建的可移植性成为可能。Maven中的profile是一组可选的配置,可以用来设置或者覆盖配置默认值。有了profile,你就可以为不同的环境定制构建。profile可以在pom.xml中配置,并给定一个id。然后你就可以在运行Maven的时候使用的命令行标记告诉Maven运行特定profile中的目标。一个Profiles下面允许出现的元素:

 

 

复制代码

<project>

    <profiles>

        <profile>

            <build>

                <defaultGoal>...</defaultGoal>

                <finalName>...</finalName>

                <resources>...</resources>

                <testResources>...</testResources>

                <plugins>...</plugins>

            </build>

            <reporting>...</reporting>

            <modules>...</modules>

            <dependencies>...</dependencies>

            <dependencyManagement>...</dependencyManagement>

            <distributionManagement>...</distributionManagement>

            <repositories>...</repositories>

            <pluginRepositories>...</pluginRepositories>

            <properties>...</properties>

        </profile>

    </profiles>

</project>                        

复制代码

  一个Profile可以覆盖项目构件的最终名称,项目依赖,插件配置以影响构建行为,Profile还可以覆盖分发配置。maven提供了一种针对不同环境参数“激活”一个profile的方式,这就叫做profile激活。

 

profile简介

 

  profile可以让我们定义一系列的配置信息,然后指定其激活条件。这样我们就可以定义多个profile,然后每个profile对应不同的激活条件和配置信息,从而达到不同环境使用不同配置信息的效果。比如说,我们可以通过profile定义在jdk1.5以上使用一套配置信息,在jdk1.5以下使用另外一套配置信息;或者有时候我们可以通过操作系统的不同来使用不同的配置信息,比如windows下是一套信息,linux下又是另外一套信息,等等。

 

profile的定义位置

 

  我们可以有多个地方定义profile。定义的地方不同,它的作用范围也不同。

 

针对于特定项目的profile配置我们可以定义在该项目的pom.xml中。

针对于特定用户的profile配置,我们可以在用户的settings.xml文件中定义profile。该文件在用户家目录下的“.m2”目录下。

全局的profile配置。全局的profile是定义在Maven安装目录下的“conf/settings.xml”文件中的。

profile中能定义的信息

 

  profile中能够定义的配置信息跟profile所处的位置是相关的。以下就分两种情况来讨论,一种是定义在settings.xml中,另一种是定义在pom.xml中。

profile定义在settings.xml中

 

  当profile定义在settings.xml中时意味着该profile是全局的,它会对所有项目或者某一用户的所有项目都产生作用。因为它是全局的,所以在settings.xml中只能定义一些相对而言范围宽泛一点的配置信息,比如远程仓库等。而一些比较细致一点的需要根据项目的不同来定义的就需要定义在项目的pom.xml中。具体而言,能够定义在settings.xml中的信息有<repositories>、<pluginRepositories>和<properties>。定义在<properties>里面的键值对可以在pom.xml中使用。

profile定义在pom.xml中

 

  定义在pom.xml中的profile可以定义更多的信息。主要有以下这些:

 

 

复制代码

l <repositories>

l <pluginRepositories>

l <dependencies>

l <plugins>

l <properties>

l <dependencyManagement>

l <distributionManagement>

l 还有build元素下面的子元素,主要包括:

<defaultGoal>

<resources>

<testResources>

<finalName>

复制代码

profile的激活方式

 

  Maven给我们提供了多种不同的profile激活方式。比如我们可以使用-P参数显示的激活一个profile,也可以根据环境条件的设置让它自动激活等。下面将对它们一一进行介绍:

使用activeByDefault设置激活

 

 

复制代码

<profiles> 

    <profile> 

        <id>profileTest1</id> 

        <properties> 

            <hello>world</hello> 

        </properties> 

        <activation> 

            <activeByDefault>true</activeByDefault> 

        </activation> 

    </profile> 

 

    <profile> 

        <id>profileTest2</id> 

        <properties> 

            <hello>andy</hello> 

        </properties> 

    </profile> 

</profiles> 

复制代码

  我们可以在profile中的activation元素中指定激活条件,当没有指定条件,然后指定activeByDefault为true的时候就表示当没有指定其他profile为激活状态时,该profile就默认会被激活。所以当我们调用mvn package的时候上面的profileTest1将会被激活,但是当我们使用mvn package –P profileTest2的时候将激活profileTest2,而这个时候profileTest1将不会被激活。

在settings.xml中使用activeProfiles指定处于激活状态的profile

 

  我们可以在settings.xml中使用activeProfiles来指定需要激活的profile,这种方式激活的profile将所有情况下都处于激活状态。比如现在我们定义了如下两个profile

 

 

复制代码

<profiles> 

    <profile> 

        <id>profileTest1</id> 

        <properties> 

            <hello>world</hello> 

        </properties> 

    </profile> 

 

    <profile> 

        <id>profileTest2</id> 

        <properties> 

            <hello>andy</hello> 

        </properties> 

    </profile> 

</profiles> 

复制代码

  这里的profile可以是定义在settings.xml中的,也可以是定义在pom.xml中的。这个时候如果我们需要指定profileTest1为激活状态,那么我们就可以在settings.xml中定义activeProfiles,具体定义如下:

 

 

<activeProfiles> 

    <activeProfile>profileTest1</activeProfile> 

</activeProfiles> 

  考虑这样一种情况,我们在activeProfiles下同时定义了多个需要激活的profile。这里还拿上面的profile定义来举例,我们定义了同时激活profileTest1和profileTest2。

 

 

<activeProfiles> 

    <activeProfile>profileTest1</activeProfile> 

    <activeProfile>profileTest2</activeProfile> 

</activeProfiles> 

  从profileTest1和profileTest2我们可以看出它们共同定义了属性hello。那么这个时候我在pom.xml中使用属性hello的时候,它到底取的哪个值呢?是根据activeProfile定义的顺序,后面的覆盖前面的吗?根据我的测试,答案是非也,它是根据profile定义的先后顺序来进行覆盖取值的,然后后面定义的会覆盖前面定义的。

使用-P参数显示的激活一个profile

 

  我们在进行Maven操作时就可以使用-P参数显示的指定当前激活的是哪一个profile了。比如我们需要在对项目进行打包的时候使用id为profileTest1的profile,我们就可以这样做:

 

 

mvn package –P profileTest1 

  当我们使用activeByDefault或settings.xml中定义了处于激活的profile,但是当我们在进行某些操作的时候又不想它处于激活状态,这个时候我们可以这样做:

 

 

Mvn package –P !profileTest1 

  这里假设profileTest1是在settings.xml中使用activeProfile标记的处于激活状态的profile,那么当我们使用“-P !profile”的时候就表示在当前操作中该profile将不处于激活状态。

根据环境来激活profile

 

  profile一个非常重要的特性就是它可以根据不同的环境来激活,比如说根据操作系统的不同激活不同的profile,也可以根据jdk版本的不同激活不同的profile,等等。

 

 

复制代码

<profiles> 

    <profile> 

        <id>profileTest1</id> 

        <jdk>1.5</jdk> 

    </profile> 

<profiles> 

复制代码

查看当前处于激活状态的profile

 

  我们可以同时定义多个profile,那么在建立项目的过程中,到底激活的是哪一个profile呢?Maven为我们提供了一个指令可以查看当前处于激活状态的profile都有哪些,这个指定就是mvn help:active-profiles。

标签:Profile,profile,定义,xml,Maven,详解,...,profileTest1,激活
From: https://blog.51cto.com/u_13991401/5884920

相关文章

  • COCO-WholeBody 注释详解
    官方数据集说明:https://github.com/jin-s13/COCO-WholeBody1.如何预览json文件?使用Vscode,右键格式化文档即可。2.字段解读2.1关键字段之"images""images":[......
  • @Aspect 注解使用详解
    AOP为AspectOrientedProgramming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是​​OOP​​​的延续,是软件开发中的一个......
  • golang 反向代理 Gin框架反向代理详解
    前言想用gin框架做一个反向代理服务,搜索了一圈,全是只讲解些皮毛的帖子,今天我就总结一下gin做反向代理的详细操作和原理正文开始之前我们先了解一些前置知识gin的通配符......
  • 网络性能评估工具Iperf详解
     一、网络性能评估工具Iperf网络性能评估主要是监测网络带宽的使用率,将网络带宽利用最大化是保证网络性能的基础,但是由于网络设计不合理、网络存在安全漏洞等原因,都会导......
  • SD NAND 的 SDIO在STM32上的应用详解(中篇)
    四.SDIO功能框图(重点)SDIO包含2个部分:●SDIO适配器模块:实现所有MMC/SD/SDI/O卡的相关功能,如时钟的产生、命令和数据的传送。●AHB总线接口:操作SDIO适配器模块中的寄存器......
  • maven制作archetype(原型)
    1.在本地新建第一个符合公司规范的maven项目2.创建archetype到本地仓库因为idea会生成很多不必要的文件,所以首先创建一个archetype.properties,配置需要过滤的文件#打包过滤......
  • VC++模拟键盘输入(keybd_event() 、 PostMessage() /SendMessage()、SendInput())详解
                                           VC++模拟键盘输入找了一周,终于找到模拟键......
  • pat 并查集题目代码详解
    不得不吐槽并查集的题太少了1118:1//一道并查集查询的题目2//需要注意的几个点3//输入的时候在进行合并时,是一个一个输入的,所以需要引入一个变量来存储前一个输......
  • pat 散列题目代码详解
    1002:1//思路很简单,存哈希表直接计算就可以了2//需要注意的几个点3//求最高次数的时候判断当前的系数是否为04//倒着输出的时候注意格式5#include<bits/std......
  • 【Android游戏开发十三】(保存游戏数据 [下文])详解SQLite存储方式,并把SQLite的数据库
    ​​ 李华明Himi ​​​原创,转载务必在明显处注明: 很多童鞋说我的代码运行后,点击home或者back后会程序异常,如果你也这样遇到过,那么你肯定没有仔细读完Himi的博文,第十九......