当前位置: 首页 > news >正文

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,从而轻松地将其集成到其他项目中。

相关文章:

  • chrome 浏览器历史版本下载
  • 从openstack环境中将服务器镜像导出的简单办法
  • 分享 ASP.NET Core Web Api 中间件获取 Request Body 两个方法
  • html+CSS部分基础运用9
  • 大数据系统架构师的论文如何写
  • 【排序算法】选择排序
  • 浅谈线性化
  • 如何修改开源项目中发现的bug?
  • 使用Spring Boot自定义注解 + AOP实现基于IP的接口限流和黑白名单
  • 【Django】开发个人博客系统【1】
  • 【LeetCode】38.外观数列
  • 第P9周:YOLOv5-Backbone模块实现
  • Leetcode刷题笔记7
  • Java集合【超详细】2 -- Map、可变参数、Collections类
  • 探索Web前端三大主流框架:Angular、React和Vue.js
  • @jsonView过滤属性
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • IDEA常用插件整理
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • js中的正则表达式入门
  • Mocha测试初探
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • Vue 动态创建 component
  • 从零开始在ubuntu上搭建node开发环境
  • 看域名解析域名安全对SEO的影响
  • 漂亮刷新控件-iOS
  • 小程序测试方案初探
  • #if和#ifdef区别
  • #Linux(帮助手册)
  • #面试系列-腾讯后端一面
  • $ git push -u origin master 推送到远程库出错
  • ()、[]、{}、(())、[[]]命令替换
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (7)STL算法之交换赋值
  • (BAT向)Java岗常问高频面试汇总:MyBatis 微服务 Spring 分布式 MySQL等(1)
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (七)Java对象在Hibernate持久化层的状态
  • (三)Honghu Cloud云架构一定时调度平台
  • (小白学Java)Java简介和基本配置
  • (转)菜鸟学数据库(三)——存储过程
  • (转载)深入super,看Python如何解决钻石继承难题
  • .net core 6 redis操作类
  • .NET Core跨平台微服务学习资源
  • .net 反编译_.net反编译的相关问题
  • .Net 基于IIS部署blazor webassembly或WebApi
  • .net 流——流的类型体系简单介绍
  • .NET 药厂业务系统 CPU爆高分析
  • .net(C#)中String.Format如何使用
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • .Net环境下的缓存技术介绍
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • @PreAuthorize注解
  • @SuppressWarnings注解
  • [ CTF ] WriteUp-2022年春秋杯网络安全联赛-冬季赛