Maven 中的 classifier 属性用过没?

最近训练营有小伙伴问到松哥一个关于 Maven 依赖的问题,涉及到 classifier 属性,随机问了几个小伙伴,都说工作中没用到过,因此简单整篇文章和小伙伴们分享下。

Maven 大家日常开发应该都有使用,Maven 中有一个比较好玩的 classifier 属性不知道小伙伴们有没有用过?

简单聊一聊这个话题。

一 Classifier 属性的作用

Classifier 属性在 Maven 中的主要作用是用于区分同一 artifact 的不同版本或变种。在 Maven 的坐标系统中,一个 artifact 通常由 groupId、artifactId 和 version 三个基本元素确定。

然而,在某些情况下,我们可能需要为同一个 artifact 创建多个不同的版本或变种,比如源代码包、文档包或特定平台的二进制包等。这时,Classifier属性就派上了用场。

通过为 artifact 添加 Classifier 属性,我们可以为同一个 artifact 创建多个不同的附件(attachment)。这些附件可以是源代码、测试代码、文档、特定平台的二进制文件等。每个附件都有一个唯一的 Classifier 值,用于区分它们。这样,我们就可以在 Maven 仓库中存储和管理这些不同的 artifact 变种,并在构建过程中根据需要引用它们。

例如下面这张图:

如果我想引用第一个 shiro-web-2.0.0-jakarta.jar 该怎么写呢?下面这种写法显然不对,这种写法引入的是 shiro-web-2.0.0.jar

<dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-web</artifactId><version>2.0.0</version>
</dependency>

二 在依赖中引用Classifier

当我们需要在其他 Maven 项目中引用具有 Classifier 的 artifact 时,我们需要在依赖声明中指定 classifier 属性。例如:

<dependencies>  <dependency>  <groupId>com.example</groupId>  <artifactId>my-artifact</artifactId>  <version>1.0.0</version>  <classifier>sources</classifier>  <type>jar</type>  <scope>compile</scope>  </dependency>  
</dependencies>

在上面的示例中,我们引用了一个 Classifier 值为 sources 的 artifact 变种。Maven 将根据 groupId、artifactId、version 和 classifier 的值在仓库中查找相应的 artifact,并将其添加到项目的依赖中。

如果是上面的 Shiro 依赖呢?写法如下:

<dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-web</artifactId><version>2.0.0</version><classifier>jakarta</classifier>
</dependency>

三 自定义 Classifier 属性

上面是我们引用别人的项目,配置 Classifier,如果要在自己的 Maven 项目中定义 Classifier,那么我们需要在 pom.xml 文件中进行相应的配置。具体来说,我们需要在 build 标签下添加 maven-jar-plugin 插件,并为其配置 classifier 属性。例如,如果我们想要创建一个包含源代码的 artifact 变种,可以这样做:

<build>  <plugins>  <plugin>  <groupId>org.apache.maven.plugins</groupId>  <artifactId>maven-jar-plugin</artifactId>  <version>3.2.0</version>  <executions>  <execution>  <goals>  <goal>jar</goal>  </goals>  </execution>  <execution>  <id>attach-sources</id>  <goals>  <goal>jar</goal>  </goals>  <configuration>  <classifier>sources</classifier>  </configuration>  </execution>  </executions>  </plugin>  </plugins>  
</build>

在上面的示例中,我们为 maven-jar-plugin 插件添加了一个名为 attach-sources 的执行,并为其配置了 classifier 属性为 sources。这表示我们将创建一个包含源代码的 artifact 变种,其 Classifier 值为 sources。

四 总结

Maven 的 Classifier 属性为我们在构建和管理 Java 项目时提供了极大的灵活性。通过为 artifact 添加 Classifier 属性,我们可以创建多个不同的版本或变种,以满足不同的项目需求或构建环境。同时,我们还可以在依赖声明中引用具有 Classifier 的 artifact,从而轻松地将其集成到其他项目中。

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

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

相关文章

最小二乘法算法(个人总结版)

最小二乘法&#xff08;Least Squares Method&#xff09;是一种通过最小化误差平方和来拟合数据的回归分析方法。它被广泛应用于线性回归、多元回归以及其他数据拟合问题中。以下是详细的教程&#xff0c;涵盖基本概念、数学推导、具体步骤和实现代码。 1. 最小二乘法基本概念…

代码随想录算法训练营第35天 |435.无重叠区间、763.划分字母区间、56.合并区间

代码随想录算法训练营第35天 |435.无重叠区间、763.划分字母区间、56.合并区间 自己看到题目的第一想法看完代码随想录之后的想法自己实现过程中遇到哪些困难 链接: 435.无重叠区间 链接: 763.划分字母区间 链接: 56.合并区间 自己看到题目的第一想法 435.无重叠区间:先对数组…

装机必备——鲁大师安装教程

装机必备——鲁大师安装教程 软件下载 软件名称&#xff1a;鲁大师 软件语言&#xff1a;简体中文 软件大小&#xff1a;144.75M系统要求&#xff1a;Windows7或更高&#xff0c; 32/64位操作系统 硬件要求&#xff1a;CPU2GHz &#xff0c;RAM2G或更高 下载通道①迅雷云盘丨…

p5开发helloworld

注意&#xff0c;执行的时候&#xff0c;后面不用带class的后缀

C语言(字符、字符串函数)2

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸各位能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎~~ &#x1f4a5;个人主页&#xff1a;小羊在奋斗 &#x1f4a5;所属专栏&#xff1a;C语言 本系列文章为个人学习笔记&#xff0c;在这里撰写成文一…

Pinia(三): 了解和使用state

1.state state 就是我们要定义的数据, 如果定义 store 时传入的第二个参数是对象, 那么 state 需要是一个函数, 这个函数的返回值才是状态的初始值.这样设计的原因是为了让 Pinia 在客户端和服务端都可以工作 官方推荐使用箭头函数(()>{ })获得更好的类型推断 import { de…

最新张量补全论文收集【8篇】

目录 1、利用张量子空间先验&#xff1a;增强张量补全的核范数最小化和 2、基于可学习空间光谱变换的张量核范数多维视觉数据恢复 3、用于图像补全的增强型低秩和稀疏 Tucker 分解 4、多模态核心张量分解及其在低秩张量补全中的应用 5、 低秩张量环的噪声张量补全 6、 视…

三十四、openlayers官网示例Dynamic clusters解析——动态的聚合图层

官网demo地址&#xff1a; https://openlayers.org/en/latest/examples/clusters-dynamic.html 这篇绘制了多个聚合图层。 先初始化地图 &#xff0c;设置了地图视角的边界extent&#xff0c;限制了地图缩放的范围 initMap() {const raster new TileLayer({source: new XYZ…

JAVA流程控制break,continue,goto

1.break在任何循环语句的主体成分&#xff0c;均可用break控制循环的流程。break用于强行退出循环&#xff0c;不执行循环中剩余的语句。&#xff08;break语句也在switch语句中使用&#xff09; 如图&#xff1a;break语句强行退出循环&#xff0c;结果输出1~30便结束&#xf…

两数之和-第13届蓝桥杯选拔赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第76讲。 两数之和&#xf…

结构体(1)

结构体: 记录班级的学生的信息: 姓名 数组 char name[30][100]; // 性别 char sex[30]; // 0 1 年龄 int age[30]; 学号 int sno[30]; 打印 小明 同学 信息 c语言 --- 提供了一种方式&#xff0c;可以让用户自定义数据类型 &#xff1a; 构造一个数据类型 …

Java面试八股之死锁和活锁的区别

死锁和活锁的区别 基本定义&#xff1a; 死锁&#xff08;Deadlock&#xff09;&#xff1a;指两个或多个线程互相等待对方释放资源&#xff0c;从而导致所有线程都无法继续执行的状态。每个线程至少持有一个资源&#xff0c;并等待另一个由其他线程持有的资源&#xff0c;形…

初始操作系统

概念&#xff1a; 1.系统资源的管理者&#xff1a;实质控制和管理整个计算机系统的硬件和软件资源&#xff0c;并合理地组织调度计算机地工作和资源的分配 2.向上层提供方便易用的服务&#xff1a;以提供给用户和其他软件方便接口和环境 封装思想&#xff1a;操作系统把一些丑…

Oracle数据库面试题-2

21. 请解释Oracle数据库中的自动存储管理(ASM)的概念。 Oracle数据库中的自动存储管理(ASM) 自动存储管理(ASM)是一种Oracle数据库的存储管理解决方案,它使得数据库管理员能够集中管理多个物理磁盘驱动器,提供了一系列高级功能,如磁盘组、冗余和备份等。ASM简化了存…

阿里云服务器接入百度云防护后显示502原因

最近&#xff0c;发现很多使用了阿里云服务器的网站出现502的情况 经百度云防护技术排查发现阿里云机房对百度云防护的IP进行了拦截&#xff0c;原因近期可能是百度云防护的IP请求过于频繁&#xff0c;导致阿里云机房策略把百度云的IP当成了攻击IP。 解决办法是提交工单让阿里…

第三方模块的下载与安装

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在进行Python程序开发时&#xff0c;除了可以使用Python内置的标准模块外&#xff0c;还有很多第三方模块可以被我们所使用。对于这些第三方模块&…

python过滤数组中的空字符串

20240603 - 解决方案 对于一个字符串数组&#xff0c;想要过滤其中的空字符串的时候。 问答一中提供了几种方案&#xff1a; str_list filter(None, str_list) str_list filter(bool, str_list) str_list filter(len, str_list) str_list filter(lambda item: item, st…

关于AI数字人的几个创作平台及其使用(二)

文章目录 二、创作平台二1、基本信息2、使用方法1、进入创作页面2、开始创作2.1、脚本创作2.1.1、使用文本软件创作2.1.2、AI创作脚本2.2、选择模板2.2.1、选择模板2.2.2、字幕与配音2.3、细节调整2.3.1、数字人2.3.2、音乐2.3.3、背景2.3.4、文字2.3.5、贴图2.3.6、智能配图或…

5.31——进军MYSQL

目录 简略版&#xff1a; 详解版&#xff1a; 一. myaql概述&#xff1a; 数据库&#xff1a; 数据库管理系统&#xff1a; SQL&#xff1a; 二. masql的安装&#xff1a; 启动与停止&#xff1a; 1. MYSQL提供的命令行 2. windows提供的命令行工具 三.数据模型 …