maven依赖管理

1.依赖范围   (依赖相当于java中的import  是否需要导入别的jar包)

使用控制依赖与三种classpath(编译期,测试时期,运行时期)的关系

complie   在编译,测试,运行时期,a项目在编译期依赖b,并且在测试和运行时期也依赖b项目, (默认值)             会打jar包或者war包

test    只在测试时有效,    a项目只在测试时依赖b项目,   不会打jwar包

provided  在编译和测试是有效,在运行时不会打jar或war包

runtime   会在测试时和运行时进行打包处理,(会打war包)

2.依赖传递

a----->b          第一关系:a依赖b    compile

b----->c           第二关系:b依赖c complie

1.纵坐标,  直接依赖

a---->b   a依赖b   那么b就是a的直接依赖

在a的pom.xml中添加b的坐标

2横坐标,    传递依赖

b----->c  b依赖c  那么c就是a的传递依赖

3.中间依赖

传递依赖的范围  a依赖c的范围

3.依赖调节原则

情景再现:
  项目 A 依赖于项目 B,项目 B 依赖于项目 C(v1), 项目 A 依赖于项目 D,项目 D
  依赖于项目 E,项目 E 依赖于 C(v2),
      1、A--->B---->C(v1) ,
      2、A------>D---->E----->C(v2)
  项目 A 隐形依赖了两个版本的 C,那到底采用哪个版本呢?

  依赖调节第一原则:    路径优先

    很明显,第一种路径深度是 3,第二种路径深度是 4,所以,maven 会采用 C(v1)

  依赖调节第二原则:    声明优先

    假设路径深度相等,那么声明在前的会被引用。

4.版本锁定

在Maven中dependencyManagement的作用其实相当于一个对所依赖jar包进行版本管理的管理器。
pom.xml 文件中,jar 的版本判断的两种途径
1.   如果 dependencies 里的 dependency 自己没有声明 version 元素,那么 maven
  就会倒 dependencyManagement 里面去找有没有对该 artifactId 和 groupId 进行过
  版本声明,如果有,就继承它,如果没有就会报错,告诉你必须为 dependency
  声明一个 version。
2.     如果 dependencies 中 的 dependency 声 明 了 version , 那 么 无 论
  dependencyManagement 中有无对该 jar 的 version 声明,都以 dependency 里的
  version 为准。

5.排除依赖

  我们仔细观察 Maven Dependencies 下的 jar 包,会发现存在了两个 javassist
包,一个是 javassist-3.18.1-GA. ,另一个是 javassist-3.11.0-GA 。这是因为我
们引入三大框架的 jar 包,hibernate 依赖 javassist-3.18.1-GA ,而 struts 依赖
javassist-3.11.0-GA 。这就是我们通常所说的 jar 包版本冲突,如果这两个 jar 包
同时存在,会导致后续某些操作会存在问题(比如 openSessionInView 失效),
所以需要排除低版本的 jar 包。
如何来排除依赖呢?添加下面红色字体的部分。作用是排除 struts 中依赖的
javassist 的 jar

  

<dependency>
  <groupId>org.apache.struts</groupId>
  <artifactId>struts2-core</artifactId>
  <version>2.3.24</version>
  <exclusions>
    <exclusion>
      <groupId>javassist</groupId>
      <artifactId>javassist</artifactId>
    </exclusion>
  </exclusions>
</dependency>

  添加后发现 javassist-3.11.0-GA 消失。

时间: 2024-10-08 01:41:29

maven依赖管理的相关文章

Spring Security 3.2.x与Spring 4.0.x的Maven依赖管理

原文链接: Spring Security with Maven原文日期: 2013年04月24日翻译日期: 2014年06月29日翻译人员: 铁锚 1. 概述 本文通过实例为您介绍怎样使用 Maven 管理 Spring Security 和 Spring 的依赖关系.最新的Spring Security公布版本号能够在 Maven Central仓库 中找到. 译者建议訪问MVNRespotory中org.springframework.security链接.本文是 使用Maven管理Spr

maven——依赖管理

管理包依赖是 Maven 核心功能之一,下面通过如何引入 jar 包:如何解析 jar 包依赖:包冲突是如何产生:如何解决包冲突:依赖管理解决什么问题:什么是依赖范围:使用包依赖的最佳实践等 6 个问题来介绍. 如何引入 jar 包 在代码开发时,如果需要使用第三方 jar 包提供的类库,那么需要在 pom.xml 加入该 jar 包依赖. 例如:使用 zookeeper client <dependencies> <!-- https://mvnrepository.com/artif

Maven 依赖管理

1  概念介绍 之前我们说过,maven 坐标能够确定一个项目.换句话说,我们可以用它来解决依赖关系.在 POM 中,依赖关系是在 dependencies部分中定义的.在上面的 POM 例子中,我们用 dependencies 定义了对于 junit 的依赖: [html] view plain copy print? <dependencies> <dependency> <groupId>junit</groupId> <artifactId&g

我的第一个springboot应用+maven依赖管理

第一步:使用Eclipse创建maven工程SpringBootFirst:工程目录如下 第二步:编写依赖文件pom.xml <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:

Spring mvc 4系列教程(二)——依赖管理(Dependency Management)和命名规范(Naming Conventions)

依赖管理(Dependency Management)和命名规范(Naming Conventions) 依赖管理和依赖注入(dependency injection)是有区别的.为了将Spring的优秀特性(如依赖注入)带到你的应用中,需要在编译时或运行时部署所需要的库(jar包).这些依赖不是虚拟的构件,而是文件系统上的物理资源.依赖管理的过程涉及到定位这些资源.存储资源.加入classpath.依赖可以是直接的(例如Spring运行时),也可以是间接的(例如commons-dbcp).间接

maven入门(8)maven的依赖管理

我们项目中用到的jar包可以通过依赖的方式引入,构建项目的时候从Maven仓库下载即可. 1. 依赖配置    依赖可以声明如下: Xml代码   <project> ... <dependencies> <dependency> <groupId>group-a</groupId> <artifactId>artifact-a</artifactId> <version>1.0</version>

Java构建工具:如何用Maven,Gradle和Ant+Ivy进行依赖管理

原文来自:https://zeroturnaround.com/rebellabs/java-build-tools-how-dependency-management-works-with-maven-gradle-and-ant-ivy/ 编译的时候可以运行,运行时出问题 在当今java项目自动化构建的场景当中,依赖管理已经成为了项目构建自动化工具中的一个主要部分,但是在过去并总是这样. 回想以前那个很爽的时候,你的项目依赖性管理只需要将jar包导入到lib文件夹中,然后将其加入到你的版本控

maven 之依赖管理

1. 基本配置: <!-- dependencies 该标签下可以配置多个依赖 --> <dependencies> <!-- 配置一个依赖 通过gav来配置的--> <dependency> <!-- gav是必须配置的基本坐标 --> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</v

MyEclipse中的Maven依赖关系管理

1. Maven支持唯一依赖关系 Apache Maven是一个软件项目管理的综合工具.根据项目对象模型(POM)的概念,Maven可以管理一个项目的依赖关系.构建.报表以及信息中心的部分文档. 依赖关系管理是Maven最知名的功能之一,也是Maven最擅长的领域之一,但是通常只利用这个功能是不可能的.几乎所有的方式都需要您去配置一个基于Maven的项目.添加和配置Maven插件.处理文件和goals.同时MyEclipse完全支持最先进的Maven功能,如果您只想对依赖关系进行管理,那么创建一