Maven- Profile详解

news2024/12/23 17:25:03

前言

Profile能让你为一个特殊的环境自定义一个特殊的构建;profile使得不同环境间构建的可移植性成为可能。

<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的定义位置

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

  • 针对于特定项目的profle配置我们可以定义在该项目的pom.xml中。
  • 针对于特定用户的profle配置,我们可以在用户的settings.xml文件中定义profle。该文件在用户家目录下的”.m2”目录下。
  • 全局的profle配置,全局的profile是定义在Maven安装目录下的“conf/settings.xm”文件中的。

三、profile中能定义的信息

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

3.1、profile定义在settings.xml中

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

3.2、profile定义在pom.xml中

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

<repositories>
    <pluginRepositories>
    <dependencies>
    <plugins>
    <properties>
    <dependencyManagement>
    <distributionManagement>
    ##还有build元素下面的子元素,主要包括:
    <defaultGoal>
    <resources>
    <testResources>
    <finalName>

四、profile的激活方式

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

4.1、使用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将不会被激活。

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

我们可以在setings,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可以是定义在setings.xml中的,也可以是定义在pom.xml中的,这个时候如果我们需要指定profileTest1为激活状态,那么我们就可以在setings.xml中定义,activeProfiles,具体定义如下:

<activeProfiles> 
    <activeProfile>profileTest1</activeProfile> 
</activeProfiles> 

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

<activeProfiles> 
    <activeProfile>profileTest1</activeProfile> 
    <activeProfile>profileTest2</activeProfile> 
</activeProfiles> 

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

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

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

mvn package –P profileTest1 

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

mvn package –P !profileTest1 

这里假设profileTest1是在设置setings.xml中使用活动配置文件标记的处于激活状态的配置文件,那么当我们使用“–P !profile "的时候就表示在当前操作中该配置文件将不处于激活状态。

4.4、根据环境来激活profile

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

<profiles> 
    <profile> 
        <id>profileTest1</id> 
        <jdk>1.5</jdk> 
    </profile> 
<profiles> 

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

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

 mvn help:active-profiles

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1664093.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【静态分析】软件分析课程实验A3-死代码检测

官网&#xff1a; 作业 3&#xff1a;死代码检测 | Tai-e 参考&#xff1a; https://www.cnblogs.com/gonghr/p/17981720 --------------------------------------------------------------------- 1 作业导览 为 Java 实现一个死代码&#xff08;dead code&#xff09;检…

Matten:视频生成与Mamba-Attention

Matten:视频生成与Mamba-Attention 摘要IntroductionRelated WorkMethodology Matten: Video Generation with Mamba-Attention 摘要 在本文中&#xff0c;作者介绍了Matten&#xff0c;一种具有Mamba-Attention架构的尖端潜在扩散模型&#xff0c;用于视频生成。在极小的计算…

数据结构(一)绪论

2024年5月11日 一稿 数据元素+数据项 逻辑结构 集合 线性结构 树形结构 </

商家转账到零钱开通揭秘,微信支付商户如何玩转分销返佣现金营销

在数字支付日益普及的今天&#xff0c;微信支付凭借其便捷、安全的特性&#xff0c;成为了众多商户的首选支付工具。而微信支付商户平台上的“商家转账到零钱”功能&#xff0c;更是为商户们打开了一扇全新的营销大门。今天&#xff0c;我们就来一起揭秘这个功能聊聊如何快速开…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-15.5讲 GPIO中断实验-通用中断驱动编写

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

Android 几种系统升级方式详解

目录 ◆ 概述 ● 几种启动模式 ● MISC分区 ● CACHE分区 ● 几种系统升级方式 ◆ Recovery升级 ● 升级包构成&#xff0c;签名&#xff0c;制作 ● 升级脚本 ● 升级过程 ◆ OTA升级 ● 升级包构成&#xff0c;制作 ● 升级脚本 ● 升级过程 ◆ fastboot升级 ◆ ADB升级 几…

成为一名算法工程师需要掌握哪些技术栈

成为算法工程师需要学习的编程技能主要包括以下几个方面&#xff1a; Python&#xff1a;Python是算法工程师最常使用的编程语言之一。它拥有简洁易读的语法和丰富的库&#xff0c;如NumPy、Pandas、SciPy、Matplotlib等&#xff0c;这些库为数据处理、科学计算和可视化提供了…

C++的数据结构(二)

一、链表的基本概念 链表&#xff08;Linked List&#xff09;是一种物理存储单元上非连续的、非顺序的线性数据结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列节点&#xff08;链表中每一个元素称为节点&#xff09;组成&#xff0c;节点…

飞利浦|西圣开放式耳机怎么选?爆款机型深度对比!

现在&#xff0c;开放式耳机以其独特的非入耳设计&#xff0c;成为了市场上的新宠。开放式耳机在佩戴上不仅能让我们长时间享受舒适的体验&#xff0c;更告别了入耳式耳机会导致的耳闷头昏的烦恼。但是现在&#xff0c;面对市场上琳琅满目的品牌和型号&#xff0c;许多消费者感…

vue3属性透传(透传 Attributes),支持多个根节点,且可以在JavaScript 中访问透传 Attributes

支持多个根节点&#xff0c;且可以在JavaScript 中访问透传 Attributes Index.vue: <script setup> import { ref, onMounted } from vue import Child from ./Child.vue import ./index.cssconst handleClick () > {console.log(1) }onMounted(() > {}) </s…

静态IP设置:小白必看攻略

在现代网络环境中&#xff0c;IP地址是连接互联网的基石。它就像网络世界中的门牌号&#xff0c;让数据能够在庞大的网络海洋中准确找到目标。其中&#xff0c;静态IP地址由于其固定不变的特性&#xff0c;在某些特殊应用场景下尤为重要。那么&#xff0c;如何设置静态IP地址呢…

Ubuntu18.04设置SSH密钥登录

我们一般使用 VSCode 、MobaXterm、PuTTY等 SSH 客户端来远程管理 Linux 服务器。但是&#xff0c;一般的密码方式登录&#xff0c;容易有密码被暴力破解的问题。所以&#xff0c;一般我们会将 SSH 的端口设置为默认的 22 以外的端口&#xff0c;或者禁用 root 账户登录。但是即…

json-server 模拟接口服务

前端开发经常需要模拟接口请求&#xff0c;可以通过 json-server 实现。 1. 安装 json-server 在前端项目的终端命令行中执行 npm i json-server2. 创建数据源 在项目中新建文件 db.json &#xff0c;与 package.json 同级&#xff0c;内容为模拟的数据 注意 json 文件对格式…

40道 Nginx 高频面试题

Nginx 是一款轻量级的 Web 服务器、反向代理服务器&#xff0c;由于它的内存占用少&#xff0c;启动极快&#xff0c;高并发能力强&#xff0c;在互联网项目中广泛应用。那么关于 Nginx 的核心面试题有哪些呢&#xff1f;今天给大家整理了40道Nginx 高频面试题&#xff0c;最近…

Java 常见集合类

集合的整体框架 Java 的集合&#xff0c;也可以叫做容器&#xff0c;根据集合的整体框架可以看出&#xff0c;主要是两大集合接口&#xff1a;第一个是 Collection 接口&#xff0c;主要用来存放单一的元素对象&#xff1b;另一个是 Map 接口&#xff0c;主要用于存储键值对。…

使用AudioCraft(MusicGen)生成音乐

AudioCraft 是一个 PyTorch 库,用于音频生成的深度学习研究。AudioCraft 包含两个先进的AI生成模型:AudioGen和MusicGen,它们共同致力于生成高质量的音频内容。 MusicGen是一个简单且可控的音乐生成模型。它利用Meta提供的20K小时授权音乐进行训练,能够根据文本描述或已有…

1_1. Linux简介

1_1. Linux简介 文章目录 1_1. Linux简介1. 我们用linux来干嘛2. 计算机组成3. 操作系统4. Linux哲学思想5. Linux目录6. Linux分区类型 1. 我们用linux来干嘛 1. 大家都知道linux是一个操作系统&#xff0c;它是一个基础的软件&#xff0c;操作系统是硬件与应用程序的中间层。…

JS中的arguments是什么?

arguments是当我们不确定有多少个参数传递时&#xff0c;就可以使用argument来获取。在js中&#xff0c;arguments实际上就是当前函数的一个内置对象&#xff0c;存储了我们传递的所有实参。arguents的展示形式就是一个伪数组&#xff0c;所以我们可以对它进行遍历。 我们先来…

使用J-Link Commander / JFlash 烧写固件程序(以STM32F103C8T6为例)

使用JFlash 烧写流程 运行JFlash, 点击Project Settings 配置Jlink为SWD方式,选择连接设备为STM32F103C8T6, 点击确定. 选择要烧录的Bin文件 设置bin文件烧录地址, 点击OK(地址要在0x08000000-0x0800FFFF范围内) Note : STM32F103C8T6 Flash大小为 64KB&#xff0c; 地址范围…

Windows只能安装在GPT磁盘上

转换磁盘分区形式 步骤1. 先按照正常流程使用Windows系统安装光盘或系统U盘引导计算机。 步骤2. 在Windows安装程序中点击“开始安装”&#xff0c;然后按ShiftF10打开命令提示符。 步骤3. 依次输入以下命令&#xff0c;并在每一行命令后按一次Enter键执行。 步骤4. 等待转换…