首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Karaf开发中的Package uses conflict有关问题解决思路

2013-11-23 
Karaf开发中的Package uses conflict问题解决思路问题现象? ?目前在OSGi环境中记录log日志有很多选择,用的

Karaf开发中的Package uses conflict问题解决思路

问题现象

? ?目前在OSGi环境中记录log日志有很多选择,用的最多的应该是slf4j,针对slf4j的增强也很多,像eclipse/equinox环境中采用logback,karaf中采用pax-logging。

? ?因为没有注意到pax-logging-api的bundle里导出了org.slf4j(包括多个版本),我在karaf(karaf运行时采用pax-logging-api)中碰到org.slf4j.impl的package use conflict异常,如下:

Unable to execute command on bundle 100: The bundle"slf4j.api_1.7.5 [100]" could not be resolved. Reason: Package usesconflict: Import-Package: org.slf4j.impl; version="1.7.0"

此时我的bundle列表如下:

?

org.slf4j.impl;uses:="org.slf4j.spi,ch.qos.logback.core.status,ch.qos.logback.classic.util,org.slf4j.helpers,ch.qos.logback.classic,ch.qos.logback.core,ch.qos.logback.classic.selector,ch.qos.logback.core.joran.spi,org.slf4j,ch.qos.logback.core.util";version=1.7.5

?

?

? ? 通过上述诊断,结合包冲突的原理,可以看出,

? ? ? ?1)pax-logging-api在karaf中优先级别高于slf4j.api,此时OSGi框架已经识别到org.slf4j包;

? ? ? ?2)在解析slf4j.api时,因slf4j.api需要导入org.slf4j.impl,而其之前没有bundle导出slf4j.impl,所以其解析状态不能变为Resolved;

? ? ? ?3)当解析到logback.classic时,此bundle导出了slf4j.impl,但其同时use包org.slf4j,因此logback.classic优先导入pax-logging-api导出的org.slf4j包。

?

? ? ? ?4)此时在其解析slf4j.api时,slf4j.api本身导出的org.slf4j与其导入org.slf4j.impl所在的logback.classic所导入的pax logging中的org.slf4j冲突。

热点排行