发生依赖冲突主要表现为系统启动或运行中会发生异常,99%表现为三种NoClassDefFoundError、ClassNotFoundException、NoSuchMethodError。
Jar包冲突是老生常谈的问题,几乎每一个Java程序猿都不可避免地遇到过,并且也都能想到通常的原因一般是同一个Jar包由于maven传递依赖等原因被引进了多个不同的版本而导致,可采用依赖排除、依赖管理等常规方式来尝试解决该问题,但这些方式真正能彻底解决该冲突问题吗?答案是否定的。笔者之所以将文章题目起为“重新看待”,是因为之前对于Jar包冲突问题的理解仅仅停留在前面所说的那些,直到在工作中遇到的一系列Jar包冲突问题后,才发现并不是那么简单,对该问题有了重新的认识,接下来本文将围绕Jar包冲突的问题本质和相关的解决方案这两个点进行阐述。
目的:便于管理,避免应用迁移时的命名冲突。 我定义的目录结构如下(linux)下:
应用从 jdk7 升级到 jdk8,终于可以用上新特性的语法进行代码编写,通过几轮开发、测试和验证后,在上预发环境时,应用突然无法启动,查看 tomcat 报错原因,发现是 类转换失败 ClassCastException
3、打开右边的maven项目,依次单击lifecycle下面的,clean、package
在使用java开发的过程中时常会碰到以上三个错误,其中NoClassDefFoundError、NoSuchMethodError两个error遭遇得会多一些。本文会简单分析三个异常发生的原因,并给出排查思路和相关工具。
之前统一管理非生产数据库的Oracle 11g GC(Grid Co)环境所用虚机被破坏了,导致无法访问,干脆安装CC(Cloud Control)新环境,现在Oracle提供了12c CC和13c CC两个大版本的安装介质,可以从如下链接找到对应版本,
酱油一篇,整理一下关于Spring Boot后台运行的一些配置方式。在介绍后台运行配置之前,我们先回顾一下Spring Boot应用的几种运行方式: - 运行Spring Boot的应用主类 - 使用Maven的Spring Boot插件`mvn spring-boot:run`来运行 - 打成jar包后,使用`java -jar`运行 我们在开发的时候,通常会使用前两种,而在部署的时候往往会使用第三种。但是,我们在使用`java -jar`来运行的时候,并非后台运行。下面我们分别针对Windows和Lin
一. 为什么会出现docker? 不用说, 肯定是时代进步的产物. 那么, 他为什么能火🔥? 一定是解决了痛点问题. docker也不是一下子就火起来了, 他的火也是有一个过程的, 我们先来看看为什么
某日线上登录出现故障,排查日志发现HttpClient请求时随机分配到的端口被占用,导致第三方登录拉取信息时无法拉取成功,错误如下:
本文介绍了一种使用Spring Boot和Redis实现缓存和Spring Data Redis实现Redis缓存的方法,并给出了具体案例。通过这些步骤,开发者可以快速地在项目中集成Redis缓存功能,提高系统的性能和效率。
Docker 是一种轻量级的容器化技术,可以将应用程序及其依赖项打包成一个独立的、可移植的镜像,从而方便地在不同的环境中运行。Java 应用程序是常见的企业级应用程序,利用 Docker 技术将 Java 应用程序容器化,可以带来很多优点,如更高的可移植性、更快的部署速度、更加稳定的运行环境等。下面将介绍如何使用 Docker 容器化 Java 应用程序,并结合实例进行演示。
坊间传闻java web开发人员写了那么多代码,但是其实一半代码都在处理NPE。总是在加班,却大部分时间都在处理包冲突,类加载不了的bug。这些问题总是让新老程序员都很抓狂,有很多的工具可以辅助我们解决这些问题(maven helper插件,arthas等)但是有没有一些原则可以遵循,在源头上避免这些问题的发生呢。
官方网址;https://arthas.aliyun.com/zh-cn/ Github:https://github.com/alibaba/arthas
在 Java 开发中,我们经常需要使用各种第三方库(Jar 包)来实现项目功能。但是,有时候不同的第三方库之间会存在依赖关系,可能会引发依赖冲突,导致程序无法正常运行。因此,如何排查和解决 Jar 包依赖冲突问题成为了每个 Java 开发人员必须掌握的技能之一。
接手了一套比较有年代感的系统,计划把重构及遇到的问题写成系列文章,老树发新枝,重温一些实战技术,分享给大家。【重构02篇】:Maven项目Jar包管理机制、冲突解决。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
开始在使用Maven时,总是会听到nexus这个词,一会儿maven,一会儿nexus,当时很是困惑,nexus是什么呢,为什么它总是和maven一起被提到呢?
依赖冲突很经常是类包之间的间接依赖引起的。每个显式声明的类包都会依赖于一些其它的隐式类包,这些隐式的类包会被maven间接引入进来,从而造成类包冲突
大家在做开发中竟然需要用到一些三方库 或者 需要集成三方的SDK开发包,尤其是项目特别庞大的时候,引用的三方的东西特别多,那么肯定会碰到一些jar包冲突的情况。
个人的一个小感受,学习一个新技术,应该以历史的眼光开看待这个新技术出现的原因,以及帮我们解决了什么问题。我们来回忆一下没有Maven的日子是怎么样的?
版权声明:Follow your heart and intuition. https://blog.csdn.net/qq_35246620/article/details/79753210
winscp软件(上传软件到Linux服务器中,alt+p,还可以下载Linux的软件到本地)
在实际的 Maven 项目开发中,由于项目引入的依赖过多,遇到 jar 冲突算是一个很常见的问题了。在本文中,我们就一起来看看,如何使用 IntelliJ IDEA 解决 jar 包冲突的问题!简单粗暴,直接上示例:
接手了一套比较有年代感的系统,计划把重构及遇到的问题写成系列文章,老树发新枝,重温一些实战技术,分享给大家。【重构01篇】,给大家讲讲Jar包冲突及原理。
本文由本人原创,原文首先发布于本人的个人博客 http://791202.com/,原文地址:在IDEA里解决maven的pom引用jar包冲突
Mvn是开发人员比较常用的一个项目管理工具,主要是对项目的创建,编译,打包操作,命令简单使用。接下来简单总结一下常用的命令。
Maven 是一个项目构建工具,现代软件开发都是一个个工程项目,软件项目的同步与管理的高昂成本催生出 Maven 这样的构建工具
任何一个职业,女生都有绝对的优势。更别提 IT 行业了,在部门中要是有女程序猿那肯定是香饽饽,备受呵护呀。
Maven是个很好用的依赖管理工具,但是再好的东西也不是完美的。Maven的依赖机制会导致Jar包的冲突。举个例子,现在你的项目中,使用了两个Jar包,分别是A和B。现在A需要依赖另一个Jar包C,B也需要依赖C。但是A依赖的C的版本是1.0,B依赖的C的版本是2.0。这时候,Maven会将这1.0的C和2.0的C都下载到你的项目中,这样你的项目中就存在了不同版本的C,这时Maven会依据依赖路径最短优先原则,来决定使用哪个版本的Jar包,而另一个无用的Jar包则未被使用,这就是所谓的依赖冲突。
Maven是个很好用的依赖管理工具,但是再好的东西也不是完美的。Maven的依赖机制会导致Jar包的冲突。举个例子,现在你的项目中,使用了两个Jar包,分别是A和B。现在A需要依赖另一个Jar包C,B也需要依赖C。但是A依赖的C的版本是1.0,B依赖的C的版本是2.0。这时候,Maven会将这1.0的C和2.0的C都下载到你的项目中,这样你的项目中就存在了不同版本的C,这时Maven会依据依赖路径最短优先原则 ,来决定使用哪个版本的Jar包,而另一个无用的Jar包则未被使用,这就是所谓的依赖冲突 。
今天碰到群里小伙伴问,线上程序好像有多个不同版本的Netty包,怎么去看到底加载了哪一个? 在说如何看之前,先来说说,当你开始意识到项目里有多个不同版本的Jar包,都是因为遇到了这几个异常: 1、java.lang.NoSuchMethodException:自己代码中调用了某个方法,因为加载了其他版本的jar,这个版本正好没这个方法。 2、java.lang.NoClassDefFoundError:编译时候是好的,但是运行的时候,因为加载的jar版本问题,没有这个类。 3、java.lang.Cla
Maven是个很好用的依赖管理工具,但是再好的东西也不是完美的。Maven的依赖机制会导致Jar包的冲突。
解决jar包冲突的简单办法– 在使用log4j.properties时,pom中导入的一些jar会产生log4j类的冲突报错,以下是一个简单的pom配置:
根据官方的解释,Skywalking是一个可观测性分析平台(Observability Analysis Platform简称OAP) 和应用性能管理系统(Application Performance Management简称APM)。
JRE System Library、Referenced Libraries、Web App Libraries 这三个都是jar包的存放集合。 JRE System Library:指Java SE 的常用库文件集合,建立普通的Java项目均会使用。 Referenced Libraries:指你项目中所使用的第三方库文件集合,如果你把项目所需要的其他JAR包直接加在,项目 --> 属性 --> Java Build Path --> Libraries 中的时候,Eclipse 会自动将这些JAR包归
groupId 公司或组织域名的倒序 artifactId 项目名或模块名 version 版本号
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
在Android组件化和插件化的过程中,经常会遇到狠多的问题,如常见的包依赖冲突,资源文件依赖冲突等问题,当然,在资源文件上面,一些组件化框架已为我们提供了一些资源文件冲突的解决方案。下面做一个简单的总结,未完待续。
在我们的项目开发中,如果使用 Maven 引用了过多依赖,那么就很容易遇到 jar包冲突这个问题。
上篇文章 记一次log4j不打印日志的踩坑记 介绍了遇到的log4j踩坑经历和解决方法,这篇文章我们重点来学习和了解下有关Java中日志组件的内容,在这之前,其实在我的头脑里,并没有形成系统的日志框架知识,原因其实是一直没有重视过这块,之前都是各种拷贝改改能跑就行,并不理解相关的架构和原理,这次趁着这个机会正好来系统了解一下,除了要系统的理解日志框架大多数知识外,我们还要学习一个非常关键的知识,就是关于Java默认的类加载器加载jar包的顺序问题,不夸张的说,只有理解了这个,才能搞明白jar冲突问题发生的本质。
Maven 在static 方法下测试没问题,请求正常,但是服务启动后出现错误信息。 在发起请求时抛出异常信息”xxxxxxxxx”signer information does not match signer information of other classes in the same package 操作: 1、移除pom 下冲突的依赖 2、移除libraries项目中导入本地jar文件 重新启动项目,错误信息依旧 最后冲突地方在 WEB-INFO 有冲突jar,在操作2中移除了,但是未在web-info 移除,竟而在打包时候此冲突的jar仍然在项目中,最后冲突的发生。 3、移除此jar 成功 重点,此错误完全是由jar冲突引起的,请仔细排查。
假设,在 JavaMavenService2 模块中,log4j 的版本是 1.2.7,在 JavaMavenService1 模块中,它虽然继承于 JavaMavenService2 模块,但是它排除了在 JavaMavenService2 模块中继承 1.2.7 的版本,自己引入了 1.2.9 的 log4j 版本。
Jenkins是一个广泛用于持续构建的可视化web工具,可用于自动化与构建、测试、交付或部署软件相关的各种任务。 可以通过安装包、tomcat、java、docker方式进行安装使用
转载自https://www.cnblogs.com/xiayangy/p/4038347.html
领取专属 10元无门槛券
手把手带您无忧上云