如何解决包怎么找包的冲突问题题

博客分类:
随着业务需求的不断扩展,应用中代码量也会逐渐增长,工程中引用的二方包或者三方包也自然而然会越来越多。因此,不可避免,可能存在引用的二方包或三方包相互冲突所导致的系统问题。
本文将针对前段时间遇到的实际案例进行分析,旨在当遇到包冲突问题时该如何解决,并提供同事用
写的一个发现包冲突的小工具(十分有用!)
一 发现问题:
首先 ,让我们看下异常,这是在应用启动后,执行具体操作时所报的错误:
根据错误我们大概可以了解,工程中引用了一个名叫
的类,并调用了其中名为
的方法,但是系统在加载该方法时却表示没有找到该方法。
这是一个很明显的包冲突问题,这类情况的发生很可能是因为如下状况引起的:
如图,你引用了
中又引用了一个
的版本号为
中也引用了
,假设这里的
为较高版本,记为
中某个类引用了
,并且该方法只存在于高版本的
中,而不存在
当系统编译加载时,系统可能编译加载
,也可能编译加载
,当编译加载
时,由于很多
包都支持向下兼容,即高版本兼容低版本,因此不论
一般都不会出问题。但如果此时刚好应用编译加载的是
时便会报上述错误,因为
函数只存在于高版本的
中,而此时系统编译加载的却是低版本的
二 解决问题
当遇到这类问题我们该如何解决呢
主要有以下三步:
发现是哪个类发生了冲突;
包,即冲突类存在于哪个
发现这个冲突
包是自身系统直接引用的还是系统引用的
间接引用的。
针对上述第一步,我们使一个 用
小工具来解决。
下载后,存放到某个目录,然后将
的存放路径设定至环境变量
包所在目录。
就会检测到目录中存在冲突的
包,并以三种格式输出
两个都输出。
可以查看用法。
下,因此在环境变量
中设置的是
,定位到应用存放
包的目录下,执行
盘中将会发现一个名为
的文档,里面记录了存放
包目录下所有冲突的
。在其中我们
一把上述系统冲突的类名“
”,发现他们原来是存在于
中。 如下图:
此时,对系统有影响的冲突类和冲突
包我们都已经发现了。
通过网上百度,原来
的产品,并且
升级版本,因此在编译过程中我们应该把
编译进工程,而不能把
编译进工程。
第三步,我们看
是否是应用直接引用的。经过确认,我的项目中并没有直接引用这两个
包,因此可能是通过其他
包间接引用进来的。由于项目中是通过
包的管理。因此, 结合 maven 的命令 mvn dependency:tree 可以很容易发现这两个jar 包到底是通过哪些jar 包间接引用进来的。
+- com.know.diamond:diamond-sdk:jar:2.0.5:compile
+- net.sourceforge.htmlunit:htmlunit:jar:1.14:compile
+- rhino:js:jar:1.6R7:compile
+- nekohtml:nekohtml:jar:0.9.5:compile
\- net.sourceforge.cssparser:cssparser:jar:0.9.4:compile
+- com.taobao.diamond:diamond-utils:jar:2.0.5:compile
+- org.codehaus.jackson:jackson-core-lgpl:jar:1.4.0:compile
\- org.codehaus.jackson:jackson-mapper-lgpl:jar:1.4.0:compile
\- com.google.collections:google-collections:jar:1.0:compile
原来是 diamond-sdk:jar 间接引用了 com.google.collections:google-collections:jar. 因此我们通知 diamond-sdk:jar 的维护者进行 jar 包升级,或者在 MVN 编译过程中强制禁止 google-collections:jar 编译进工程。如下:
&dependency&
&groupId&com.know.diamond&/groupId&
&artifactId&diamond-sdk&/artifactId&
&version&2.0.5&/version&
&exclusions&
&exclusion&
&groupId&com.google.collections&/groupId&
&artifactId&google-collections&/artifactId&
&/exclusion&
&/exclusions&
&/dependency&
OK,重新编译工程,启动,问题解决。
浏览: 34481 次
遇到同样的问题了,文章写得很清晰,但是没有提供conflict ...
图怎么看????
conflictdetect.exe 能否发我一下?
你好,你的conflictdetect工具可否共享一下,不胜感 ...
正在看,写的挺不错,内容挺丰富,浅尝辄止,相当适应初学者... ...帐号:密码:下次自动登录{url:/nForum/slist.json?uid=guest&root=list-section}{url:/nForum/nlist.json?uid=guest&root=list-section}
贴数:1&分页:apple发信人: appleypp (apple), 信区: LinuxApp
标&&题: [问题]请问在用yum 安装包时如何解决冲突
发信站: 水木社区 (Wed May 22 01:00:17 2013), 站内 && 执行 yum install&&libxul.so 时 提示如下 && Transaction Check Error: && file /usr/share/man/man5/limits.conf.5.gz from install of pam-1.1.1-13.el6.i686 conflicts with file from package pam-1.1.1-13.el6.x86_64 && file /usr/share/man/man5/namespace.conf.5.gz from install of pam-1.1.1-13.el6.i686 conflicts with file from package pam-1.1.1-13.el6.x86_64 && file /usr/share/man/man8/faillock.8.gz from install of pam-1.1.1-13.el6.i686 conflicts with file from package pam-1.1.1-13.el6.x86_64 && file /usr/share/man/man8/pam_cracklib.8.gz from install of pam-1.1.1-13.el6.i686 conflicts with file from package pam-1.1.1-13.el6.x86_64 && file /usr/share/man/man8/pam_env.8.gz from install of pam-1.1.1-13.el6.i686 conflicts with file from package pam-1.1.1-13.el6.x86_64 && file /usr/share/man/man8/pam_faillock.8.gz from install of pam-1.1.1-13.el6.i686 conflicts with file from package pam-1.1.1-13.el6.x86_64 && file /usr/share/man/man8/pam_lastlog.8.gz from install of pam-1.1.1-13.el6.i686 conflicts with file from package pam-1.1.1-13.el6.x86_64 && Error Summary
------------- && 如果卸载 pam-1.1.1-13.el6.x86_64&&出错如下
rpm -e pam-1.1.1-13.el6.x86_64
error: Failed dependencies: &&&& libpam.so.0()(64bit) is needed by (installed) ConsoleKit-libs-0.4.1-3.el6.x86_64 &&&& libpam.so.0()(64bit) is needed by (installed) ppp-2.4.5-5.el6.x86_64
................. &&&& -- && ※ 来源:·水木社区 ·[FROM: 60.223.237.*]
文章数:1&分页:jar包冲突问题 - ITeye问答
公司采用的报表组件中的JAR包里包含了老版本的POI代码,但是最近开发需要用到最新版本POI代码,这样就会产生JAR包冲突问题。现在想到的唯一办法就是改变一下POI源码中pacakge,然后重新打一个jar除此之外,还有什么好的解决办法吗?
问题补充:&div class="quote_title"&anyasir 写道&/div&&div class="quote_div"&可以试着删除以前的jar,不过有一定风险
&br /&无论是软件还是jar,一般都会向上兼容,即新版本兼容老版本
&br /&所以应该可以删除,但不排除某些软件或jar的开发人员违背这个原则
&br /&poi这玩意儿貌似用的人很多,像这样的jar应该会遵守这个原则
&br /&不过俺不敢把话说死了&/div&
&br /&
&br /&POI并不是完全向下兼容,已经测试过了..
问题补充:&div class="quote_title"&dk101 写道&/div&&div class="quote_div"&&&&&&&& 建议直接上新版本的POI,替换老版本的POI包,修改原来的业务代码来适应新版本的POI包,这样只痛苦一次,以后都方便了。重构Jar包,也很痛苦,说不定还会带来新的问题。&/div&
&br /&
&br /&报表组件是第三方的,没源码,无法修改。
采纳的答案
不知道 另外启一个项目怎么样,两个项目的jar包就不会有冲突现象了。
&&&&&&& 建议直接上新版本的POI,替换老版本的POI包,修改原来的业务代码来适应新版本的POI包,这样只痛苦一次,以后都方便了。重构Jar包,也很痛苦,说不定还会带来新的问题。
你想到的方法已经算是很好的解决方案了,如果不想出现这种情况,就是新的库中使用其他类库& 如:& jxl
把之前的jar包先移除看有没有影响.
可以试着删除以前的jar,不过有一定风险
无论是软件还是jar,一般都会向上兼容,即新版本兼容老版本
所以应该可以删除,但不排除某些软件或jar的开发人员违背这个原则
poi这玩意儿貌似用的人很多,像这样的jar应该会遵守这个原则
不过俺不敢把话说死了
已解决问题
未解决问题问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
我有一个问题:一般是在项目目录有一个package.json文件,里面有要引入的包,执行安装后,依赖的包会被下载到node_modules目录下面,但是如果包之间相互依赖,而出现依赖相同的包,但是不一样的版本,那怎么办呢,这不就冲突了吗?
比如我要引入A包和B包,他们又同时依赖C包,A依赖C 1.0.0版本,B依赖C 2.0.0版本,那这样C包不冲突了吗,如果node_modules目录下面的包目录是带版本号就好了,不然可怎么办呢?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
npm 已经帮你解决了这些问题,你不用担心,只管用就好了。
npm2 是把所有依赖依次安装到模块目录下的 node_modules 这也导致了很多时候win下目录过深无法删除。npm3 平行安装依赖,但不同版本依然安装到自己模块下的 node_modules 同时会创建一个带版本号的目录到根 node_modules 下。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
run cnpm install, 然后看看你的node_modules你就发现如何解决的说的问题,即peer dependencies的问题。 安装不同的版本,并且用软链的方式解决。
同步到新浪微博
分享到微博?
Hi,欢迎来到 SegmentFault 技术社区!⊙▽⊙ 在这里,你可以提出编程相关的疑惑,关注感兴趣的问题,对认可的回答投赞同票;大家会帮你解决编程的问题,和你探讨技术更新,为你的回答投上赞同票。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:&>&SSH整合jar包,彻底解决集成jar包冲突问题
SSH整合jar包,彻底解决集成jar包冲突问题
上传大小:24.06MB
SSH整合jar包,彻底解决集成jar包冲突问题,内涵绝大部分常用框架的jar包和一些常用jar包
综合评分:3.9(20位用户评分)
所需积分:
下载个数:72
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var q = $("#form1").serializeArray();
console.log(q);
var res_area_r = $.trim($(".res_area_r").val());
if (res_area_r == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
var mess = $(".res_area_r").val();
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, _username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click",'.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
$(".res_area_r").val($.trim($(".res_area").val()));
评论共有10条
问题解决了,谢谢你的jar包咯!
还好,就是jar包有点老了。
亲自试了,还是有冲突,某类冲突,刚刚忘记把该问题复制过来了,额
多谢作者分享,非常好用
不是最新版本的,还是蛮感谢的
问题解决了,谢谢你的jar包咯!
我发现我导进去启动的时候还是会报错。。怎么回事吖?
有些老了,不过还是谢谢分享 可以借鉴
额,有点老了,呵呵,不过还是蛮感谢的
审核通过送C币
SSH SSM 框架源码
创建者:ajlgl
微信端开发
创建者:chenhongxin
创建者:chenhongxin
上传者其他资源上传者专辑
开发技术热门标签
VIP会员动态
前端开发重难点
17年软考最新真题及解析
物联网全栈开发专题
二十大技术领域优质资源
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
CSDN&VIP年卡&4000万程序员的必选
SSH整合jar包,彻底解决集成jar包冲突问题
会员到期时间:
剩余下载个数:
剩余C币:0
剩余积分:
积分不足!
资源所需积分
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分
当前拥有积分
当前拥有C币
(仅够下载10个资源)
全站1200个资源免积分下载
资源所需积分
当前拥有积分
当前拥有C币
全站1200个资源免积分下载
资源所需积分
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
全站1200个资源免积分下载
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
SSH整合jar包,彻底解决集成jar包冲突问题}

我要回帖

更多关于 如何解决jar包冲突 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信