Maven的使用(依赖冲突)

1.1Maven坐标

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

坐标(GAV)

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

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

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

1.2 Maven常见命令

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

1.3 POM 标签详解

<!-- project标签:父标签 ,未来pom中所有的内容都要放在project标签里面\-->

<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+artifactId+version:全球唯一,坐标,简称GAV --> <!-- 组id:包名 -->

<groupId>com.czxy</groupId>

<!-- 项目名,艺术品的名字 -->

<artifactId>maven01</artifactId>

<!-- 版本号,当前项目的版本号 -->

<version>0.0.1-SNAPSHOT</version>

<!-- 打包方式 jar:javaSE项目 war:javaEE项目(WEB项目) pom:父项目(多模块再讲解)\-->

<packaging>jar</packaging>

<!-- name和url:非必须,任意赋值 -->

<name>mavendemo01</name>

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

<!-- properties:属性,里面可以配置好多好多属性,这个标签不是必须的 -->

<properties>

<!-- 默认配置了编码 -->

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

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

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

</properties>

<!-- dependencies:复数,里面可以放置多个 -->

<dependencies>

<!-- dependency:单数,具体的jar包 -->

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

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

<scope>test</scope>

</dependency>

</dependencies>

<build>

<!-- plugins:插件\-->

<plugins>

<!-- plugin:具体的插件 -->

<plugin>

<!-- 统一jdk版本的插件,强制要求添加 -->

<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添加自定义依赖

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

  1. 网络:

http://www.mvnrepository.com/

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

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

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

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

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

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

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

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

路径最近的 直接依赖

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

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

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

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

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

Dao  domain   service   web    utils     commons 子项目

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

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

  • 继承:子工程继承父工程 依赖和插件
  • 聚合:子工程之间相互依赖,形成一个整体,整体就是一个聚合工程聚合和继承通常一起使用​​​​​​​
点赞
收藏

评论区

加载中...

相关推荐

Maven 基础标签之版本管理和冲突解决

前言我们在做java项目的时候由于jar包太多,我们就需要使用maven做项目管理,管理项目的jar包依赖,包括打包上线maven基础Maven是一个项目管理工具,主要用于项目构建,依赖管理,项目信息管理每个maven项目根目录都会有一个pom.xml文件,负责项目构建,依赖管理在这个文件里面,你只需要添加相应的jar包坐标配置,maven就会自动

maven添加自定义jar包

maven添加自定义jar包找到maven安装bin目录mvninstall:installfileDfileJAR包所在路径(如e:\xxxx)DgroupId包的groupid名(可以是自己取的名)DartifactId包的artifactID名(可以是自己取的名)Dversion版本号(可以自己取的,例如

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

Google开源GSON的使用

\谷歌开原项目GitHub地址:https://github.com/google/gson1.新建一个maven项目,引入gson的dependency坐标依赖以及commonsio的坐标:<!处理json格式数据<dependency<groupIdcom.g

IDEA打开Maven项目找不到jar问题

这应该是IDEA的bug导致的,我发现不管是Eclipse建的项目,还是IDEA建的项目,都有可能出现本地Maven仓库有jar包,但是项目报错找不到jar包。今天找到解决方案了,记录一下:我发现同一个项目,通过git或者svn,clone相同的分支和版本,在某些电脑上正常,某些电脑上报错。实际上是IDEA在打开项目的时候会在根目录下生成一个以项

Maven第四篇【私有仓库、上传jar包、引用私服jar包、上传本地项目到私服】

搭建私有服务器前面已经说过了,我们使用Maven的使用,如果需要导入相对应的jar包,Maven首先会在我们的本地仓库中寻找—私有仓库—中心仓库…然而,我们的本地仓库常常没有想要的jar包的,而经常去中心仓库下载这就非常浪费时间和资源了…因此我们一般都有一个私有仓库…另外有些公司都不提供外网给项目组人员,因此就不能使用mave