描写叙述,在一个Maven项目中.同一时候依赖了spring-tomcat-weaver  和  struts-core 包.可是spring-tomcat-weaver 须要commons-digester-1.2 struts-core 须要commons-digester-1.8 Pom文件例如以下: <dependencies> <dependency> <!-- 须要commons-digester-1.2包 --> <groupId>org.sp…
一.由来 之前同事问了个问题,就是当前工程为spring boot项目,假设版本号为2.0.3 这个项目中依赖了一个spring boot项目依赖(先别管为啥有这么奇葩的依赖,这个版本是1.5.9). 1.5.9的版本,会传递一堆starter过来. 结果最终看到的是,所有的starter版本都是2.0.3. 二.原因 maven官方有下面一段话: https://maven.apache.org/guides/introduction/introduction-to-dependency-me…
传递依赖是maven最有特色的.最为方便的优点之一,可以省了很多配置.如a 依赖 b,b 依赖c 默认 a也会依赖 c.但是也会带来隐患,如版本冲突.当然maven也考虑到解决办法,可以使用exclusions来排除相应的重复依赖. 但是我们还会遇到一个严重的问题,那就是,我怎么知道是哪个包的传递依赖产生的冲突 ?那该怎么办呢?当然,maven也会有相应的解决方案. 首先,你要在pom.xml中加上maven-project-info-reports-plugin插件. <reporting>…
1 传递依赖冲突解决(了解) 传递依赖:A(项目)依赖B,B依赖C(1.1版本),B是A的直接依赖,C就是A的传递依赖 导入依赖D,D依赖C(1.2版本) 1.1 Maven自己调解原则 1.1.1 第一声明者优先原则 谁先定义的就用谁的传递依赖. 1.1.2 路径近者优先原则 直接依赖级别高于传递依赖. 1.2 排除依赖 1.3 版本锁定(推荐使用)   ====================dependencyManagement 是什么 Maven中的dependencyManageme…
calsspath:仅加载本工程中的配置文件 classpath*:既要加载本工程中配置文件,也要加载jar包中的配置文件…
举例A依赖于B及C,而B又依赖于X.Y,而C依赖于X.M,则A除引B及C的依赖包下,还会引入X,Y,M的依赖包(一般情况下了,Maven可通过<scope>等若干种方式控制传递依赖).这里有一个需要特别注意的,即B和C同时依赖于X,假设B依赖于X的1.0版本,而C依赖于X的2.0版本,A究竟依赖于X的1.0还是2.0版本呢?这就看Classloader的加载顺序了,假设Classloader先加载X_1.0,而它就不会再加载X_2.0了,如果A恰恰希望使用X_2.0呢,血案就这样不期而遇了.…
问题 maven传递依赖 解决方案   前段时间,开发中遇到一个关于maven依赖包的问题:由于业务需要,支付网关对账代码中的slf4j-api包需要更新,原包为1.5.8版本,需要更新到1.6.4版本.如下图:   本来应该是件很简单的事情,把pom.xml文件里的依赖项修改下就OK了嘛!可是,打开pom.xml文件才发现,dependency里根本没有slf4j的配置信息.那么,问题来了,这个jar包是怎么引进来的呢?研究了半天也没找到根源,由于还有其他工作,就没有继续研究,临时解决方案为:…
现在,你也知道Maven做依赖管理使用Maven仓库的概念.但是,如果依赖是不提供任何远程存储库和中央存储库发生了什么? Maven提供为使用外部依赖的概念,应用在这样的场景. 举一个例子,让我们做以下修改项在目Maven创建项目 这一章节中创建. 添加lib文件夹到src文件夹 复制任何的jar到lib文件夹.我们使用ldapjdk.jar,这是LDAP操作的辅助库. 现在我们的项目结构看起来应该像下面的: 在这里,有自己的特定项目,这是很平常案例库,它可以包含jar文件可能无法在任何Mave…
本文是系列文章<Maven 源码解析:依赖调解是如何实现的?>第三篇,主要介绍依赖调解的第一条原则:传递依赖,路径最近者优先.本篇内容较多,也是开始源码分析的第一篇,请务必仔细阅读,否则后面的文章可能就看不懂了.系列文章总目录参见:https://www.cnblogs.com/xiaoxi666/p/15583241.html. 场景 A有这样的依赖关系:A->B->C->X(1.0).A->D->X(2.0),X是A的传递性依赖,但是两条依赖路径上有两个版本的…
在maven的pom文件中 <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version></version> <scope>test</scope> </dependency> </dependencies> 那这个例子很简单,但是实际开发…
原博文出自于:http://blog.csdn.net/liutengteng130/article/details/47000069   感谢! 假设A-->C  B-->A      ==> B-->C ,A依赖于C是直接依赖,B依赖于A是直接依赖,B依赖于C是传递依赖. 现象一 举个例子:A-->log1.0  B-->log2.0 C-->A,B 那么我们来看依赖关系: User-core依赖于log4j 1.2.17 <dependency>…
例如创建三个maven工程A B C pom文件分别为 A <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.…
本文是系列文章<Maven 源码解析:依赖调解是如何实现的?>第四篇,主要介绍依赖调解的第二条原则:传递依赖,第一声明者优先.请按顺序阅读其他系列文章,系列文章总目录参见:https://www.cnblogs.com/xiaoxi666/p/15583241.html. 场景 路径最近者优先原则不能解决所有问题,比如这样的依赖关系:A-> C->X(1.0).A->D->X(2.0),X(1.0)和 X(2.0)的依赖路径长度是一样的,都为 2.那么到底谁会被解析使用…
一.传递依赖 官方文档解释的传送门:http://ifeve.com/maven-dependency-mechanism/ 当存在传递依赖的情况时,主工程对间接依赖的jar可以访问吗? 例如:A.jar依赖于B.jar,而B.jar依赖于C.jar,那么要怎么修改配置文件,才会让A.jar 也依赖 B.jar 呢? 这要看传递依赖的jar包引入时的依赖范围——只有依赖范围为compile时可以访问 即 要使A.jar 依赖于C.jar 当且仅当C.jar的范围是compile 如下演示Hell…
前些天就安装了Maven,以备自己以后整合项目用,尤其是我们的ssh,ssm项目.想必好多人在开始的时候并不清楚Maven是什么,它能够帮助我们干什么. 所以在学习Maven之前我们一定要知道它是什么,并且知道它能够帮助我们干什么! Maven是什么: 这里博主就偷个懒,引用了百度百科上面的解释,它的解释可能不一定完全描述这个Maven,但是对于初学者我们知道这个就行了. Maven能够帮助我们干什么: 它的主要两个功能: 依赖管理(jar包管理) 构建项目 ①我们知道java项目(web)在开…
maven 检查依赖冲突和版本冲突   在项目发布的时候,一般都需要进行依赖冲突检查或者重复类的检查,这个时候我一般会使用下面的两个命令:   1 2 3 mvn -U clean package -Dmaven.test.skip=true enforcer:enforce -DcheckDeployRelease_skip=true -Denforcer.skip=false   mvn -U dependency:tree -Dverbose   dependency: tree是检查版本…
大多数java应用源码构建和依赖管理是使用maven来实现的,maven也是java构建和依赖管理的事实上的标准.我们的应用系统也都是基于maven构建的,maven虽然在依赖管理方面确实很牛叉,但是并不能很优雅地解决所有依赖的问题,比如此次谈及的“全局排除”功能. 之前包括现在都在经历这样的事情,想禁止一个依赖被依赖进来,如果这个依赖属于冷门的依赖,很少类库会间接依赖它,那么进行一次排除完全OK,但是如果一个依赖是热门依赖,比如常用的apache的commons系列工具库,单独排除也可以实现,…
我们项目中用到的jar包可以通过依赖的方式引入,构建项目的时候从Maven仓库下载即可. 1. 依赖配置    依赖可以声明如下: <project> ... <dependencies> <dependency> <groupId>group-a</groupId> <artifactId>artifact-a</artifactId> <version>1.0</version> <exc…
若排版紊乱可查看我的个人博客原文地址 maven的依赖特性很多很杂,这里大概总结一下,maven的依赖特性主要是依赖范围和传递依赖,前者会影响后者,这篇文章会介绍传递依赖的传递原则,出现冲突传递依赖默认如何处理,我们自己可以怎么处理等内容 依赖范围 依赖范围会影响传递性依赖,同时也会影响项目构建任务中使用的classpath. Maven有以下6种依赖范围: compile 这是默认范围.如果没有指定,就会使用该依赖范围.编译依赖对项目所有的classpath都可用.此外,编译依赖会传递到依赖的…
单体 Spring Boot Maven 工程 最基本的 pom.xml 包含工程信息.Spring Boot 父工程.属性配置.依赖包.构建插件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-ins…
MAVEN已经成为事实上的企业项目开发中的项目类型.无论是IDEA还是Eclipse,都已经默认支持创建MAVEN项目.严格意义上来说,MAVEN不是一种新的JavaEE项目类型.它凌驾于所以的项目类型上面,是对之前项目的一种“管理”.如果我们创建了MAVEN项目,那么会很方便的干这两件事情: 1:管理所有的依赖包.其中一个例子是,以往我们要引入一个第三方的jar包,需要把该jar包从网上(或者其它地方)下载回来,然后引入到项目中.而现在,我们只要在pom文件中引入改jar包的标识符,然后mav…
依赖: <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.0</version> <scope>test</scope> </dependency>1.依赖的范围(依赖的有效性) compile(默认值) test 比如:Junit provided 比如:servlet-api…
A依赖B,B依赖C.B是A的直接依赖,C是A的传递依赖. 1.Maven自己调解原则 先定义者优级先原则,谁先定义就用谁的传递依赖. 路径近者优级先原则,直接依赖级别高高于传递依赖. 2.排除依懒 <exclusions> <exclusion> <artifactId>spring-beans</artifactId> <groupId>org.springframework</groupId> </exclusion>…
着重基础之—构建工具—Maven的依赖管理 项目构建利器Maven给我们开发人员带来了极大的便利,从繁琐的jar包管理中脱身的程序员终于可以有时间再进入另一个坑了. 我今天要给大家分享的内容是我在实际开发中遇到的一个问题,Maven的依赖管理,以及冲突管理.相关内容其实网上已经有了很多,我在此记录,只是想强化下记忆. 依赖单元:Maven依赖是使用Maven坐标来定位的,而Maven坐标主要由GAV(groupId, artifactId, version)构成.最简单的依赖: <depende…
在maven的管理体系中,各个项目组成了一个复杂的关系网,但是每个项目都是平等的,是个没有贵贱高低,众生平等的世界,全球每个项目从理论上来说都可以相互依赖.就是说,你跟开发Spring的大牛们平起平坐,你的项目可以依赖Spring项目,Spring项目也可以依赖你的项目(虽然现实中不太会发生,你倒贴钱人家也不敢引用). 项目的依赖关系主要分为三种:依赖,继承,聚合 依赖关系 依赖关系是最常用的一种,就是你的项目需要依赖其他项目,比如Apache-common包,Spring包等等. <depen…
在maven项目中引用dubbo的maven依赖的时候会引入dubbo中传递依赖的spring的依赖包如下:         <!-- dubbo相关的jar包 -->        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>dubbo</artifactId>        </dependency> 但是如…
烦恼:当我们手上有一堆三方件jar包,想要转成maven管理时,需要一个一个配置进pom文件中,而且GAV信息还得去收集. 为了快速生成如下信息,我们可以这样.... GAV:groupId + artifactId + version <dependency> <groupId></group> <artifactId></artifactId> <version></version> </dependency&g…
前面我们讲了maven项目中的最重要的文件:pom.xml 配置文件相关内容.介绍了pom 是如何定义项目,如何添加依赖的jar 包的等. 我们知道,在Maven的生命周期中,存在编译.测试.运行等过程,那么有些依赖只用于测试,比如junit:有些依赖编译用不到,只有运行的时候才能用到,比如mysql的驱动包在编译期就用不到(编译期用的是JDBC接口),而是在运行时用到的:还有些依赖,编译期要用到,而运行期不需要提供,因为有些容器已经提供了,比如servlet-api在tomcat中已经提供了,…
使用Maven添加依赖项时(Add Dependency)时,没有提示项目可用,并且在Console中,输出: Unable to update index for central|http://repo1.maven.org/maven2 . 解决方式如下: 1.通过其它方式下载如下两个文件: http://repo1.maven.org/maven2/.index/nexus-maven-repository-index.properties http://repo1.maven.org/m…
如果项目中maven依赖太多,由于还有jar之间的间接依赖,所以可能会存在依赖冲突.依赖冲突大部分都是由于版本冲突引起的,查看maven的依赖关系,可以找到引起冲突的间接依赖 如上图,通过Dependency Hierachy可以查看到间接依赖,这里slf4j-api与其他引用的版本有冲突,我们可以exclude禁用这个间接依赖,代码如下: <dependency> <groupId>displaytag</groupId> <artifactId>disp…