IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> maven中dependency中的参数 -> 正文阅读

[Java知识库]maven中dependency中的参数

<dependency>

<groupId>com.baomidou</groupId>

<artifactId>mybatis-plus-annotation</artifactId>

<version>3.5.0</version>

<scope>compile</scope>

</dependency>

? ? ? ? 大家都会用maven,了解dependency是处理依赖包的,有时候在运行springBoot项目时,会报错,提示XXXXnot fund,这种情况有时候就是依赖包为找到导致的,有时候又会有疑问:“明明包已经依赖了,为什么还会提示找不到呢?”,说明了解的不充分,充分了解dependency,对处理问题也有很大的帮助。

? ? 先了解dependency中的参数:部分源码如下

<xs:element name="dependency" minOccurs="0" maxOccurs="unbounded" type="Dependency"/>

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:all>

</xs:complexType>

<xs:complexType name="Dependency">

<xs:annotation>

<xs:documentation source="version">3.0.0+</xs:documentation>

</xs:annotation>

<xs:all>

<xs:element name="groupId" minOccurs="0" type="xs:string">

<xs:annotation>

<xs:documentation source="version">3.0.0+</xs:documentation>

<xs:documentation source="description">

The project group that produced the dependency, e.g.

<code>org.apache.maven</code>;.

</xs:documentation>

</xs:annotation>

</xs:element>

这是部分源码,

dependency中包含:

  • ? ? ?<groupId> : 创建项目的组织或团队的唯一Id,可视为公司名

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? eg:<groupId>org.apache.maven</code>

  • ? ?<artifactId >:? 项目中的唯一Id,可视为项目名

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? eg: <artifactId> maven-artifact</artifactId>

  • ? ? <version>? :? ?产品的版本号??

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?eg: <version>4.0.0</version>

  • ? ? <scope>? ? : 指jar包作用范围? 包含:test ,compile peovided ,runtime,system?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? eg: <scope>test</scope>? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? test:指测试范围有效,在编译和打包的时候都不会使用这个依赖

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? compile :编译范围有效,在编译和打包的时候,会将依赖存储进去

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?provided:在编译和测试 有效,最后生成war包时不会加入,如: servlet-api。(war包是tomcat打包,因为tomcat有servlet-api,再打包会出现冲突)。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? runntime:指被依赖项目无需参与项目编译的,不过后期的测试和云习惯周期需要其参与。和compile相比,跳过编译而已,区别并不大。一般的scope为runntime 。通常runntime搭配optional使用,optional为true。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ??system? :和provided相同,不过被依赖项不会从仓库抓,而是从本地文件系统拿,一定需要配合systempath属性使用,eg:<scope>system</scope>

? ? ? ? ? ? ? ? ? ? ? ? ? ? <systempath>${basedir}/web/core-1.3.jar</systempath>

  • <exclusions> : 依赖排除,有时候依赖jar包冲突,可以使用此注解,将依赖排除掉,不引用该jar ;

? ? ? ? ? ? ? ?举例说明:projectA依赖jar-B(版本为1.1),projectC也依赖jar-B(版本为1.2),假如现在有一个项目同时依赖项目A和项目B,那么他就会导入两个版本的B(1.1和1.2),由于B的两个版本不同,这里就会导致包冲突,这个时候就需要exclusions来解决冲突,不过maven也有一个机制会避免两个都加载进去,

下面先介绍maven的依赖调节原则:

1,第一原则:路径近者优先原则

???????????????????????A→B→C→X(1.1)

???????????????????????D→E→X(1.2)

???????????????????????使用X(1.2),因为其路径更近

2,第二原则:第一声明者优先原则

???????????????????????A→B→X(1.1)

???????????????????????C→D→X(1.2)

??????????????????????使用X(1.1),因为其先声明

maven会先根据第一原则判断,若路径相等,再根据第二原则判断

但是我们还是使用exclusions来配置更加合理,

我们使用spring bean 和 struts2 spring plugin来举个例子说明这个问题并使用exclusions来解决这个问题

(spring bean 和 struts2 spring plugin都依赖spring-core但是版本不一样)我们在运行是会出现冲突报错,此时就需要用到exclusions注释,去除冲突。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?eg:? ?<dependency>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?<groupid>test</groupid>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??<artifactid>test</artifactid>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?<version>1.0.2-SNAPSHOT</version>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??<exclusions>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??<exclusion>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??<groupid>org.springframework</groupid>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?<artifactid>spring</artifactid>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??</exclusion>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?<exclusion>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?<artifactid>?slf4j-log4j12</artifactid>

????????????????????<groupid>org.slf4j</groupid>

????????????????</exclusion>

????????????</exclusions>

????????</dependency>

  • <optional> : 当 projectA 依赖projectB ,projectB 依赖projectD时 标记依赖是否可以传递,默认值:false

? ? ? ? ? ? ? ? ? ? ? ? ? 如果需要传递则定义true;

? ? ? ? ? ? ? ? ? ? ? ?optional 可以减少项目之间的包冲突

  • ? ? <type> :依赖的类型,jar 或war (默认jar)

  • <classifier> :通常用于从同一个pom架构中拥有不同内容的构件,可选属性,如,依赖jar -1.0-jdk1,jar-1.0-jdk2,jar-1,2-jdk3,如果不加classifier,则maven找不到包,需要加上,明确想要的版本.

? ? ? ? ? ? ? ? ? ? <version>1.0</version>

? ? ? ? ? ? ? ? ? ? ?<classifiler>1.0</classifier>

总结:以上maven 中的dependency依赖并不是全部都要写,其中groupId ,artfactId,version 这三个是基本的依赖,不可缺少。其他的根据自己需求写。

注:自己在使用依赖包的时候,学会根据提示信息,判断包冲突问题,多数是依赖版本的冲突导致。

??

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-05-21 18:48:02  更:2022-05-21 18:50:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:35:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码