Maven Pom 文件中的隐式依赖导致Jar冲突问题

目录
  • 在maven项目中遇到这样一个场景
  • 解决了上述冲突的问题
  • Maven 查看jar包依赖关系

在maven项目中遇到这样一个场景

  • 项目中的pom文件中,依赖了Spring-core,而Spring-core又隐式的依赖了commons-logging
  • 项目中同时配置了对定时任务quartz 包的依赖,而quartz又隐式依赖了slf4j。

这样项目中既有了commons-logging又有了slf4j。导致在log4j.properties里配置的mybatis的sql显示配置,一直没起作用,直到我查看maven dependencie中的jar包时,才发现项目既依赖了common-logging又引入了slf4j。后来通过排除quartz中的slf4j的依赖

解决了上述冲突的问题

<dependency>
				<groupId>org.quartz-scheduler</groupId>
				<artifactId>quartz</artifactId>
				<exclusions>
					<exclusion>
					    <groupId>org.slf4j</groupId>
					    <artifactId>slf4j-api</artifactId>
					</exclusion>
				</exclusions>
			</dependency>

以后该如何解决这种类似的问题呢。eclipse提供了对隐式依赖jar包的查看功能:在eclipse中打开一个pom文件,在Dependency Hierarchy的Tab页中,就可以查看当前pom文件中显示声明的jar包,及这些显示声明的jar中隐式引入的依赖jar包。

这样就可以查看有哪些隐式的依赖jar会导致jar包冲突了。

Maven 查看jar包依赖关系

使用eclipse操作,在项目中打开pom.xml文件进入Dependency Hierarchy 来查看依赖树

  • Dependency hierarchy:依赖层次视图
  • Resolved dependencies:依赖关系解析

点击右边jar或者搜索需要查找的jar可以在左边找到对应关系

比如在NewEnergyCheckDemo项目中启动springBoot工程控制台不打印错误信息,那一定是某个日志jar包有冲突导致的,我们就可以直接搜索要查找的jar,我们可以看到在pom.xml文件中依赖了

而Commons-vfs2这个jar包中又隐式依赖了commons-logging

在项目中我们又配置了spring-boot-starter-web的依赖

我们可以看到该jar包又隐式依赖了一些其他的jar包,如spring-boot-starter又包含了spring-boot-starter-logging,该依赖的内容就是springBoot默认的日志框架logback,所以我们在使用springBoot的日志框架时应该先排除commons-vfs2中commons-logging该jar包的依赖.

排除jar包依赖,找到需要排除的jar包点击右键如下图

排除依赖之后的pom.xml坐标如下

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 使用maven工具解决jar包冲突或重复加载的问题

    在使用maven开发项目的过程中,经常会遇到jar包重复加载或者jar包冲突的问题的,但是由于有些jar是由于maven的依赖加载自动加载进来的, 而不是开发者自己配置的,特别是当项目中pom中配置的jar包依赖本身很多时,开发者靠自己的经验,有时很难找出是哪个jar的加载导致加载了 多余的依赖jar,从而产生冲突. 今天刚好遇到一个借用eclipse中的maven插件解决jar包依赖冲突的问题,分享一下. 项目中出现的问题如下: Caused by: java.lang.NoClassDefF

  • 详解maven依赖冲突以及解决方法

    什么是依赖冲突 依赖冲突是指项目依赖的某一个jar包,有多个不同的版本,因而造成类包版本冲突 依赖冲突的原因 依赖冲突很经常是类包之间的间接依赖引起的.每个显式声明的类包都会依赖于一些其它的隐式类包,这些隐式的类包会被maven间接引入进来,从而造成类包冲突 如何解决依赖冲突 首先查看产生依赖冲突的类jar,其次找出我们不想要的依赖类jar,手工将其排除在外就可以了.具体执行步骤如下 1.查看依赖冲突 a.通过dependency:tree是命令来检查版本冲突 mvn -Dverbose dep

  • maven 隐式依赖引起的包冲突解决办法

    包冲突 1.使用maven管理项目时可能会遇到包冲突的情况比如:log4j-over-slf4j.jar 和 slf4j-log4j12.jar这两个包同时一起运行时就会有问题. 2.这种冲突可能是显式依赖导致,也可能是隐式依赖导致. 显式依赖,直接可以从pom.xml文件的<dependency>中看到两个冲突包的引用. 隐式依赖,在pom.xml的<dependency>无法看到冲突的包,而是由<dependency>引入的包间接引入的. 解决 先确认哪些依赖间接引

  • Maven中jar包冲突原理与解决办法

    Maven中jar包冲突是开发过程中比较常见而又令人头疼的问题,我们需要知道 jar包冲突的原理,才能更好的去解决jar包冲突的问题.本文将从jar包冲突的原理和解决两个方面阐述Maven中jar包冲突的解决办法. 一.Maven中jar包冲突产生原因 MAVEN项目运行中如果报如下错误: Caused by:java.lang.NoSuchMethodError Caused by: java.lang.ClassNotFoundException 十有八九是Maven jar包冲突造成的.那

  • Maven Pom 文件中的隐式依赖导致Jar冲突问题

    目录 在maven项目中遇到这样一个场景 解决了上述冲突的问题 Maven 查看jar包依赖关系 在maven项目中遇到这样一个场景 项目中的pom文件中,依赖了Spring-core,而Spring-core又隐式的依赖了commons-logging. 项目中同时配置了对定时任务quartz 包的依赖,而quartz又隐式依赖了slf4j. 这样项目中既有了commons-logging又有了slf4j.导致在log4j.properties里配置的mybatis的sql显示配置,一直没起作

  • 基于Maven pom文件中属性变量总结

    目录 Maven pom文件属性变量总结 1.内置属性 2.POM属性 3.自定义属性 Maven pom变量定义 定义变量并赋值 Maven pom文件属性变量总结 1.内置属性 ${basedir}表示当前项目根目录 ${version}表示当前项目版本 2.POM属性 ${project.artifactId} 等价于元素的值 个人理解,本质上每个标签底层是通过对象的引用实现,也同样存在继承特性(仅仅是个人理解,供参考). 以此类推,可以发现很多这一类的属性定义. 类似地 ${projec

  • pom文件中${project.basedir}的使用

    目录 ${project.basedir}的使用 这块配置就是定义自己的项目目录结构 Maven的六类属性,${project.basedir},${project.build.directory} 内置属性 POM属性 自定义属性 Settings属性 Java系统属性 环境变量属性 在依赖中使用pom变量 在插件中使用pom变量 自定义变量 ${project.basedir}的使用 <project> 是 pom.xml 的根节点,project.basedir 就是根节点的下级节点,缺

  • .NET 6 中的隐式命名空间引用

    目录 1.历史变化 2.新版本 3.More usage 4.More 前言: 之前写过一篇隐式命名空间引用的大概介绍,在一些小的测试项目中也有在用,一直没作为示例给大家分享,主要原因在于之前看到了一个关于隐式命名空间引用的 Github issue 提到会有一些破坏性的变更,现在 .NET 6 RC 1 版本已经发布,RC 版本的发布也就意味着新功能的开发已经基本结束,正式版发布之前会专注于各种测试和 BUG 修复. 1.历史变化 .NET 6 Preview 7 时微软已经开始引入隐式命名空

  • C++11中模板隐式实例化与显式实例化的定义详解分析

    目录 1. 隐式实例化 2. 显式实例化声明与定义 3. 显式实例化的用途 1. 隐式实例化 在代码中实际使用模板类构造对象或者调用模板函数时,编译器会根据调用者传给模板的实参进行模板类型推导然后对模板进行实例化,此过程中的实例化即是隐式实例化. template<typename T> T add(T t1, T2) { return t1 + t2; } template<typename T> class Dylan { public: T m_data; }; int ma

  • C语言中自动隐式转换与类型强制转换实例分析

    本文通过一个C程序实例对C语言中自动隐式转换与类型强制转换的注意点进行深入分析,详情如下: 先看一个C程序: #include<stdlib.h> #include<stdio.h> #include<conio.h> double proc(int q){ int n; double sum,t;//本例的关键就在这几个变量的类型上 sum = 2.0; while(sum<=q){ t=sum; //sum = sum+(n+1)/n;//自动隐式转换 sum

  • Java中的隐式参数和显示参数实例详解

    在学习Java的过程中,我们会遇到许多的问题.下面我们就来看看什么是隐式参数和显示参数. 显式参数,就是平时见到的在方法名括号中间的参数,就是所谓能看得见的参数. 隐式参数,是在类的方法中调用了类的实例域.这个被调用的实例域就是隐式参数.在以下的这个类中调用了a.ariseSalary(100),就用到了隐式参数.比如: public class Abc { private double salary; public Abc(){ } public void ariseSalary(double

  • scala中的隐式类型转换的实现

    Scala语言中的隐式转换是一个十分强大的语言特性,主要可以起到两个作用: 一.自动进行某些数据类型的隐式转换 String类型是不能自动转换为Int类型的,所以当给一个Int类型的变量或常量赋予String类型的值时编译器将报错.所以,一下语句是错误的. val x: Int = "100" 如果需要将一个字符串类型的整形数值赋给Int,比如使用String.toInt方法,例如: val x: Int = "100".toInt 如果想让字符串自动转换为整形,就

  • 谈谈MySQL中的隐式转换

    工作过程中会遇到比较多关于隐式转换的案例,隐式转换除了会导致慢查询,还会导致数据不准.本文通过几个生产中遇到的案例来. 基础知识 关于比较运算的原则,MySQL官方文档的描述: https://dev.mysql.com/doc/refman/5.6/en/type-conversion.html 如果 判断符号左右两边有一个为NULL,结果就是null,除非使用安全的等值判断 <=> (none) 05:17:16 >select  null = null; +------------

随机推荐