Maven的使用(依赖冲突)

Stella981
• 阅读 612

1.1Maven坐标

坐标:每一个jar包或maven项目在网络上都有一个独一无二的身份证

坐标(GAV)

  1. groupId 公司或组织域名的倒序(仓库:包名)
  2. artifactId 项目名或模块名(仓库:项目名)
  3. version 版本号(仓库:版本号)

坐标和本地仓库有关系么?

  • 有关系的。
  • 路径:**/仓库名/groupid名/artifactid**名/version/

1.2 Maven常见命令

Maven的使用(依赖冲突)

  • compile:编译。 把项目中的Java文件编译为class文件,生成target目录
  • clean:清除。   删除target目录
  • package:打包。把target目录中的内容,打包成jar或war
  • install:安装。 把生成的jar包或war包安装到本地仓库
  • 所有本地项目都可以共享该项目的方法和类

1.3 POM 标签详解

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation=_"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"_\>

<modelVersion>4.0.0</modelVersion>

<groupId>com.czxy</groupId>

<artifactId>maven01</artifactId>

<version>0.0.1-SNAPSHOT</version>

<packaging>jar</packaging>

<name>mavendemo01</name>

<url>http://maven.apache.org</url>

<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<java.version>1.8</java.version>

<hehe.version>5.1</hehe.version>

</properties>

<dependencies>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>${hehe.version}</version>

<scope>test</scope>

</dependency>

</dependencies>

<build>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-compiler-plugin</artifactId>

<version>3.5.1</version>

<configuration>

<target>1.8</target>

<source>1.8</source>

</configuration>

</plugin>

</plugins>

</build>

</project>

1.4 为POM添加自定义依赖

  • 本地仓库:(断网正常使用)

Maven的使用(依赖冲突)

Maven的使用(依赖冲突)

Maven的使用(依赖冲突)

  1. 网络:

http://www.mvnrepository.com/

本地仓导入:适用于知道项目名/jar包名/jar包下某个类名,jar包必须存在于本地仓库

网络导入:适用于jar包没在本地仓库

1.5 ​​​​​​​依赖范围

  • 不同jar包有自己的作用范围,为了更加精准地使用jar包。
  • 依赖范围:jar包作用范围

Maven的使用(依赖冲突)

Maven的使用(依赖冲突)

2. 依赖冲突

​​​​​​​2.1依赖关系&依赖冲突

将来项目中会因为相同jar包的不同版本导致项目崩溃。

  • Maven项目中的jar包依赖关系:

直接依赖:A依赖B

项目A,直接导入了jar包B

  • 间接依赖(传递性依赖):A依赖B,B依赖C,A间接依赖C

项目A,直接导入了jar包B,jar包B依赖jar包C,项目A间接依赖jar包C

Maven的使用(依赖冲突)

依赖冲突问题,由间接依赖导致:

  • 项目A直接导入了jar包B和jar包C
  • Jar包B 依赖了 jar包D 1.1版本
  • Jar包C 依赖了 jar包D 2.1版本

​​​​​​​2.2 依赖冲突的调解原则:路径近者优先

路径最近的 直接依赖

Maven的使用(依赖冲突)

Maven的使用(依赖冲突)

​​​​​​​2.3 依赖冲突的调解原则: 第一声明优先

  • 哪个间接依赖先声明,就按谁的版本导入

Maven的使用(依赖冲突)

​​​​​​​2.4 依赖冲突解决方案:直接排除法

Maven的使用(依赖冲突)

Maven的使用(依赖冲突)

建议排除叶子节点,否则容易引起连锁反应

​​​​​​​3.1 工程分层

Dao  domain   service   web    utils     commons 子项目

​​​​​​​3.2 聚合(多模块)和继承

  • 继承:maven项目中,子项目可以继承父项目的依赖和插件等配置。
  • 聚合:多个maven子项目可以组成一个完整的项目,这就是聚合

Maven的使用(依赖冲突)

  • 继承:子工程继承父工程 依赖和插件
  • 聚合:子工程之间相互依赖,形成一个整体,整体就是一个聚合工程聚合和继承通常一起使用​​​​​​​
点赞
收藏
评论区
推荐文章
kenx kenx
3年前
Maven 基础标签之版本管理和冲突解决
前言我们在做java项目的时候由于jar包太多,我们就需要使用maven做项目管理,管理项目的jar包依赖,包括打包上线maven基础Maven是一个项目管理工具,主要用于项目构建,依赖管理,项目信息管理每个maven项目根目录都会有一个pom.xml文件,负责项目构建,依赖管理在这个文件里面,你只需要添加相应的jar包坐标配置,maven就会自动
梦
3年前
maven添加自定义jar包
maven添加自定义jar包找到maven安装bin目录mvninstall:installfileDfileJAR包所在路径(如e:\xxxx)DgroupId包的groupid名(可以是自己取的名)DartifactId包的artifactID名(可以是自己取的名)Dversion版本号(可以自己取的,例如
Easter79 Easter79
3年前
SpringBoot+Druid+Mybatis连接Oracle
最近有一个新项目需要开发搭建了个SpringBoot框架记录一下!Oracle连接jar编译到maven仓库参考:Maven编译jar包到本地仓库(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fblog.csdn.net%2Fwzsy_ll%2Farticle%2Fdetails
Stella981 Stella981
3年前
Google开源GSON的使用
\谷歌开原项目GitHub地址:https://github.com/google/gson1.新建一个maven项目,引入gson的dependency坐标依赖以及commonsio的坐标:<!处理json格式数据<dependency<groupIdcom.g
Stella981 Stella981
3年前
IDEA打开Maven项目找不到jar问题
这应该是IDEA的bug导致的,我发现不管是Eclipse建的项目,还是IDEA建的项目,都有可能出现本地Maven仓库有jar包,但是项目报错找不到jar包。今天找到解决方案了,记录一下:我发现同一个项目,通过git或者svn,clone相同的分支和版本,在某些电脑上正常,某些电脑上报错。实际上是IDEA在打开项目的时候会在根目录下生成一个以项
Stella981 Stella981
3年前
Maven第四篇【私有仓库、上传jar包、引用私服jar包、上传本地项目到私服】
搭建私有服务器前面已经说过了,我们使用Maven的使用,如果需要导入相对应的jar包,Maven首先会在我们的本地仓库中寻找—私有仓库—中心仓库…然而,我们的本地仓库常常没有想要的jar包的,而经常去中心仓库下载这就非常浪费时间和资源了…因此我们一般都有一个私有仓库…另外有些公司都不提供外网给项目组人员,因此就不能使用mave
Stella981 Stella981
3年前
SpringBoot 引入本地或第三方Jar包
在开发过程中,我们会遇到一些Maven仓库没有的Jar包的情况,比如公司其他团队开发的Jar包等。这时我们就不能通过Pom文件引入。这里我们使用hutoolJar为例。一、使用Maven命令把Jar包添加到本地仓库(1)执行maven命令,把Jar添加到本地。mvninstall:installfileDfile/Us
Stella981 Stella981
3年前
SpringBoot+Druid+Mybatis连接Oracle
最近有一个新项目需要开发搭建了个SpringBoot框架记录一下!Oracle连接jar编译到maven仓库参考:Maven编译jar包到本地仓库(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fblog.csdn.net%2Fwzsy_ll%2Farticle%2Fdetails
Stella981 Stella981
3年前
Maven仓库
maven仓库分为本地仓库、远程仓库。项目引用依赖时,先从本地仓库按照坐标查找,如果没有找到则到远程仓库查找,如果还没有就报错。设定本地仓库修改setting.xml文件配置,自定义本地仓库路径。本地仓库只有一个。<localRepository/path/to/local/repo</localRepository
京东云开发者 京东云开发者
7个月前
jar包冲突组建设计书
.背景实际开发过程中,使用maven管理jar给我们开发带来了很多便利,不需要自己一个一个的jar包下载了,只需要配置个pom配置文件就可以了,写上对应坐标和仓库地址就可以了。但是jar冲突没问题没有解决,有冲突的jar包maven不会给我们检查出来还是会