pom.xml的scope/classifier等容易忽略标签

2023-11-02

一、scope标签的值

1、compile:默认值,可省略不写。此值表示该依赖需要参与到项目的编译、测试以及运行周期中,打包时也要包含进去。
2、test:该依赖仅仅参与测试相关的工作,包括测试代码的编译和执行,不会被打包,例如:junit。
3、runtime:该依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile相比,跳过了编译而已。例如JDBC驱动,适用运行和测试阶段。
4、provided:该依赖在打包的时候可以不用包含进去,别的设施会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。相当于compile,但是打包阶段做了exclude(排除)操作。
5、system:从参与度来说,和provided相同,不过被依赖项不会从maven仓库下载,而是从本地文件系统拿。需要添加systemPath的属性来定义路径

二、pom.xml案例

<!-- compile表示在build,test,runtime阶段的classpath下都有依赖关系。 -->
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-core</artifactId>
	<version>${spring.version}</version>
<!-- <scope>compile</scope> -->
</dependency>
<!--只在test阶段有依赖关系,例如junit -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
<!-- runtime表示在构建编译阶段不需要,只在test和runtime需要。这种主要是指代码里并没有直接引用而是根据配置在运行时动态加载并实例化的情况。虽然用runtime的地方改成compile也不会出大问题,但是runtime的好处是可以避免在程序里意外地直接引用到原本应该动态加载的包。例如JDBC连接池 -->
<dependency>
	<groupId>commons-dbcp</groupId>
	<artifactId>commons-dbcp</artifactId>
	<version>1.4</version>
	<scope>runtime</scope>
</dependency>
<!--provided表示在build,test阶段都有依赖,在runtime时并不输出依赖关系而是由容器提供,例如web war包都不包括servlet-api.jar,而是由tomcat等容器来提供-->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>
<!-- system 有些你依赖的jar包可能是没有maven坐标的,它完全不在maven体系中,这时候你可以把它下载到本地硬盘,然后通过system来引用 -->
<!-- 不过不推荐使用system,因为一个项目的pom.xml如果使用了scope为system的depend后,会导致传递依赖中断,即所有其他依赖本项目的项目都无法传递依赖了。-->
<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>alipay-sdk-java</artifactId>
     <version>java20171012102412</version>
     <scope>system</scope>
   <systemPath>${project.basedir}/libs/alipay-sdk-java20180309170622.jar</systemPath>
</dependency>

三、scope不同值参与阶段

  • compile,依赖参与项目的编译、运行、打包,都会参与;
  • test,仅参与测试时候的编译、运行,不会打包进去项目中;
  • runtime,参与项目的运行和打包,不会参与编译;
  • provider,参与编译、运行、不会打包到项目中,其他设施会提供;
  • system,参与编译、运行、打包时需要自定义;

四、Maven的打包三种插件

  • maven-jar-plugin,默认的打包插件,用来打普通的project JAR包
  • maven-shade-plugin,用来打可执行JAR包,也就是所谓的fat JAR包
  • maven-assembly-plugin,支持自定义的打包结构,也可以定制依赖项等

五、classifier使用

1、classifier概述

classifier通常用于区分从同一POM构建的具有不同内容的构件(artifact)。它是可选的,它可以是任意的字符串,附加在版本号之后。

2、使用场景

  • 场景一:区分基于不同JDK版本的jar包

如果项目依赖,json-lib-2.2.2-jdk13.jar。则XML配置内容如下:
假如这个目录下有以下两个jar包:

<dependency>  
    <groupId>net.sf.json-lib</groupId>   
    <artifactId>json-lib</artifactId>   
    <version>2.2.2</version>  
    <classifier>jdk13</classifier>    
</dependency>  

如果项目依赖,json-lib-2.2.2-jdk15.jar。则XML配置内容如下:

<dependency>  
    <groupId>net.sf.json-lib</groupId>   
    <artifactId>json-lib</artifactId>   
    <version>2.2.2</version>  
    <classifier>jdk15</classifier>    
</dependency>  
  • 场景二:区分项目的不同组成部分,例如:源代码、javadoc、类文件等。
    如果需要json-lib-2.2.2-jdk15-javadoc.jar。则XML配置内容如下:
<dependency>  
    <groupId>net.sf.json-lib</groupId>   
    <artifactId>json-lib</artifactId>   
    <version>2.2.2</version>  
    <classifier>jdk15-javadoc</classifier>    
</dependency> 

如果需要json-lib-2.2.2-jdk15-sources.jar。则XML配置内容如下:

<dependency>  
    <groupId>net.sf.json-lib</groupId>   
    <artifactId>json-lib</artifactId>   
    <version>2.2.2</version>  
    <classifier>jdk15-sources</classifier>    
</dependency> 

六、optional标签使用

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional> <!-- 表示依赖不会传递 -->
</dependency>

比如父工程引入依赖,那么子工程不能继承引入spring-boot-devtools
避免依赖冲突,如果是false遇不设置optional那么就会继承引入

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pom.xml的scope/classifier等容易忽略标签 的相关文章

  • 如何使用 Webpack 加载器导入 XML,而不自动转换为 JSON

    Webpack 4 的 xml loader 自动将导入的 XML 文件转换为 JSON 通过什么方式可以导入XMLwithout转换为 JSON XML 数据将使用现有的 应用程序专用的 XML 解析器进行处理 明确地说 我绝对愿意not
  • Spring Boot 中的 JSTL 支持

    虽然我知道有JSP 支持中的一些限制 http docs spring io spring boot docs current reference html boot features developing web applications
  • 有人可以推荐一个免费的 xslt 工具吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • VBA XML V6.0 如何让它等待页面加载?

    我一直在努力寻找答案 但似乎找不到任何有用的东西 基本上 我是从一个网站上拉取的 当您在该页面上时 该网站会加载更多项目 我希望我的代码在加载完成后提取最终数据 但不知道如何让 XML httprequest 等待 Edited Sub p
  • PHP 和 DOM 文档

    我有一个关于 DOMDocument 的使用和创建 XML 的问题 我有一个 PHP 程序 加载到 XML 文件中 处理XML的每个节点 行 将其发送到另一个进程 然后该进程返回一个 XML 元素 我获取节点的字符串表示形式 以便可以创建
  • 根据属性值使用 xslt 合并两个元素

    这是我的源文件的样子
  • XPath 中的 ., 有什么用?

    为什么在某些 XPath 表达式中句号后面使用逗号 这是一个例子 Set nlist doc selectNodes book author first name starts with M 我试图用谷歌搜索这个 但字面意思 运算符似乎不喜
  • JSPX 命名空间对于 EL 函数不可见?

    我正在尝试使用 JSPX JSP 的纯 XML 语法 并遇到看起来应该可以工作但实际上却不起作用的情况 我使用 jsp root 元素中的命名空间声明导入标签库 然后稍后将这些用于元素以及 EL 函数
  • Onejar,使用maven,不会将资源复制到jar中

    我正在使用 one jar 来打包我的程序 我在 src main resources 中有资源 maven resources plugin正确地将资源复制到jar中 但是onejar生成的jar不包含我的资源 这是我的 pom
  • primefaces 二维码未显示?

    I am using primefaces to develop a web app I am trying to show the bar code on mhe webpage All coders are shown except t
  • Booking.com酒店管理API

    我拥有一家酒店 并在 booking com 上查看了 API 因为我想创建自己的前端界面来更新我的酒店房价 房间数 以及通过该 API 上传图片 更新酒店描述 然而 我唯一能找到的是一个 API 供联营公司以一定的价格获取特定位置的酒店等
  • Jackson XML ArrayList 输出具有两个包装器元素

    我在 Jackson 生成的 XML 输出中得到了两个包装器元素 我只想拥有一个 我有一个 Java bean Entity Table name CITIES JacksonXmlRootElement localName City pu
  • XML-RPC 和 SOAP 有什么区别?

    我从来没有真正理解为什么 Web 服务实施者会选择其中之一 XML RPC 通常出现在较旧的系统中吗 任何有助于理解这一点的帮助将不胜感激 差异 SOAP 更强大 并且更受软件工具供应商 MSFT NET Java 企业版等 的青睐 SOA
  • 使用 Jackson 使用不带注释的属性来序列化 xml

    我目前正在使用 Jackson 编写一些代码 将遗留 POJO 序列化为 XML 但我需要使用属性而不是子元素来序列化它们 有没有办法使用 Jackson 来做到这一点 而不需要向遗留类添加注释 有没有办法使用 Jackson 来做到这一点
  • 使用 XML 和 C# 创建 Word 文档

    我已经为报告创建了一个 xml 模板 用户应该能够通过我用 C 创建的程序添加信息以根据自己的需要个性化此报告 如何根据用户输入文本框的内容编辑实体的内容 然后将其显示在 Word 上 网上有大量有关使用 XML 和 C 创建 Word 文
  • Maven:如何使用本地 lib 目录作为依赖项而不是 Maven 存储库

    我在集成测试期间的项目结构如下 Project A conf contains the configuration files lib Contains the all dependencies pom xml target test Co
  • 手动编辑 Jar 以更改包名称

    我有一个来自外部源的 jar 文件 jar 中的所有类都位于 com xyz 包中 我想将所有类移动到 com xyzold 包中 这是否像解压缩 jar 将 xzy 文件夹重命名为 xyzold 并重新压缩它一样简单 或者我还需要修改每个
  • Swagger for Micronaut 与 Maven

    我想从 Spring Boot 2 切换到 Micronaut 框架 而且我在 Swagger 设置上遇到了困难 在 Spring Boot 2 项目中 我有以下依赖项
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • XSL字符串多重替换功能

    如何让这个函数进行多重替换 经验 替换aaa with 111并替换bbb with 222 etc

随机推荐

  • 关系型数据库-MySQL:连接数据库

    连接数据库常用选项 h 指定服务器地址 u 指定登录用户名 P 指定服务端口号 S 指定套接字路径 D 指定要登录的数据库 C 数据压缩传输 e 非交互式执行sql语句 E 查询结果纵向显示 等同于mysql提示符下的 G 1 交互式登录本
  • python为什么要创建虚拟环境

    最近在学习新的知识 需要用到tensorflow 我在网上寻找安装教程 遇到了很多疑问 大部分的教程都说需要开启虚拟幻境 我不理解为什么需要虚拟环境 后来慢慢理解 原来在不同的项目中 需要使用到不同版本的python解释器之类的 不能每次都
  • spark集群启动后WorkerUI界面看不到Workers解决

    前话 我有三台机分别是 192 168 238 129 master 192 168 238 130 slave2 192 168 238 131 slave1 spark 版本是2 0 2 hosts文件已经配置上面参数 最近在搭spar
  • 好的vue框架-模板

    最近发现一个好的vue模板 1 访问地址 Vue Element Adminhttps panjiachen github io vue element admin dashboard 2 github地址 GitHub PanJiaChe
  • MYSQL索引的使用

    1 索引类型 索引可以提升查询速度 会影响where查询 以及order by排序 MySQL索引类型如下 从索引存储结构划分 B Tree索引 Hash索引 FULLTEXT全文索引 R Tree索引 从应用层次划分 普通索引 唯一索引
  • 【2021-03-20】【Mybatis】Mybatis 判断字符串非空和空串 报错, Encountered “ <IDENT> “AND ““ at line 1

    Mybatis Mybatis 判断字符串非空和空串 报错 Encountered AND at line 1 1 Mybatis xml 代码 2 console 控制台报错 org mybatis spring MyBatisSyste
  • 5G技术详解:带AMF重选的注册流程(Step 5a-7a)

    相关文章会在公众号同步更新 公众号 5G通信大家学 持续更新的相关5G内容都是直接根据3GPP整理 保证更新内容的准确性 避免通过二手 甚至多手的资料 以讹传讹误导网友 在介绍完流程详解后 会整理专题内容 比如切片 服务发现 QoS流端到端
  • 使用smtplib库隐藏授权码发送邮件

    效果图 代码如下 进行邮箱连接的库 import smtplib 处理邮件内容的库 from email mime text import MIMEText import keyring 获取授权码 pwd keyring get pass
  • Spring注入Bean的七种方式

    通过注解注入Bean 背景 我们谈到Spring的时候一定会提到IOC容器 DI依赖注入 Spring通过将一个个类标注为Bean的方法注入到IOC容器中 达到了控制反转的效果 那么我们刚开始接触Bean的时候 一定是使用xml文件 一个一
  • Kafka基本安装和启动

    Kafka基本安装和启动 一 下载解压Kafka 二 启动zookeeper 三 启动Kafka 四 创建测试Topic 五 启动Producer 六 启动Consumer 七 Producer窗口发送消息 八 删除数据 九 有可能遇到问题
  • Java实现_ssh远程会话连接池实现_使用ObjectPool和PooledObjectFactory

    一 需求背景 公司的大数据集群作为基础平台 为公司内部各应用提供计算和存储能力 为实现各应用单独管理并进行资源隔离 一般采用多租户管理 集群为应用租户分配了固定的计算资源 如下应用租户B 应用端在利用spark连接大数据集群时 会根据exe
  • 数组-约瑟夫环

    题目描述 已知有n个人围坐在一张圆桌上 编号依次为0 1 2 n 1 编号为n 1与编号为0的人坐在相邻的位置 现在编号为k的人从1开始报数 数到m的那个人会退出圆桌 他的下一个人又从1开始报数 数到m的那个人又出列 依此规律重复下去 请问
  • OSS对象存储的简单实现

    前提准备好阿里云对象存储的账号 gt 创建一个bucket 设置好访问权限 gt 创建用于上传文件的子账号得到accessKey和secretKey以及endpoint gt sdk例子java简单上传的例子测试 引入alicloud os
  • 快速排序(非递归)

    快速排序非递归 基本思想 默认升序 从数组中选取一个数来作为标准数 所有比这个数小的数全部放到其前面 比这个数字大的数放到其后面 此时这个标准数所处的位置就是其在有序数组中的位置 因此该标准数就不用在移动了 我们对其左右两边的数字继续执行之
  • 通过RabbitMq实现动态定时任务的实现。

    通过RabbitMq实现动态定时任务的需求 一 需求背景 定时任务的需求所谓是数不胜数 其中实现方式也是百花齐放 用得最多的大概率为Springboot中的 Scheduled cron 0 0 1 1 注解 或者是定时任务XXL JOB框
  • 蓝桥杯官网练习题(翻硬币)

    题目描述 小明正在玩一个 翻硬币 的游戏 桌上放着排成一排的若干硬币 我们用 表示正面 用 o 表示反面 是小写字母 不是零 比如 可能情形是 oo oooo 如果同时翻转左边的两个硬币 则变为 oooo oooo 现在小明的问题是 如果已
  • JAVA中getClass()以及getName()方法

    getClass public final Class
  • JSch链接linux服务器问题解决方案

    问题 Session connect java io IOException End of IO Stream Read或者Algorithm negotiation fail 方案 需要修改的文件路径 etc ssh sshd confi
  • 金融经济学研究什么?

    文章目录 什么是金融 资产和资产的回报率 资产定价 金融摩擦与金融契约理论 有效市场之争与行为金融 什么是金融 金融就是资金融通 由维基百科所定义的 金融是处理资产和负债 在 时间和确定及不确定状态下分配的领域 如何理解呢 主要从这么几点入
  • pom.xml的scope/classifier等容易忽略标签

    文章目录 一 scope标签的值 二 pom xml案例 三 scope不同值参与阶段 四 Maven的打包三种插件 五 classifier使用 1 classifier概述 2 使用场景 六 optional标签使用 一 scope标签