首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何理解为什么Apache中没有满足包的需求?

如何理解为什么Apache中没有满足包的需求?
EN

Stack Overflow用户
提问于 2016-12-12 00:29:22
回答 2查看 1.5K关注 0票数 0

我在嵌入式模式下使用Felix,与一起使用,并且有一个已安装但未解析的包(因此没有启动/活动),而且我比我想象的要在日志中找到根源更困难……

你是如何/从哪里得到那些“无法解决.因为.”的有帮助的样子的?或者"BundleException:包中未解决的约束.无法解决.缺少的需求. osgi.wiring.package“之类的日志消息,自动来自framework和/或文件安装包?我没看到那样的东西-我应该看到吗?哪里?

我还添加了日志记录(通过Apache Felix日志osgi-loglistener-slf4j),但是仍然没有--为了在(嵌入式) Felix中启用这种问题,您需要比我做的更多吗?

然后,我添加了Felix CLI,发现它的inspect命令也没有多大帮助(对于未解析的包不起作用),而且只有start会显示根本原因--但是我如何才能让它记录下来,而不必有控制台和启动:

代码语言:javascript
运行
复制
g! lb  
START LEVEL 1
   ID|State      |Level|Name
    0|Active     |    0|System Bundle (5.6.1)|5.6.1
    1|Active     |    1|Apache Felix File Install (3.5.4)|3.5.4
    2|Active     |    1|Apache Felix Remote Shell (1.1.2)|1.1.2
    3|Active     |    1|Apache Felix Gogo Runtime (0.16.2)|0.16.2
    4|Active     |    1|Apache Felix Gogo Command (0.16.0)|0.16.0
    5|Active     |    1|Apache Felix Gogo Shell (0.12.0)|0.12.0
    6|Installed  |    1|osgi.testplugin (1.0.0.SNAPSHOT)|1.0.0.SNAPSHOT
g! inspect req * 6
Bundle 6 is not resolved.
g! start 6
org.osgi.framework.BundleException: Unable to resolve ch.vorburger.minecraft.osgi.testplugin [8](R 8.0): missing requirement [ch.vorburger.minecraft.osgi.testplugin [8](R 8.0)] osgi.wiring.package; (osgi.wiring.package=org.spongepowered.api.command) Unresolved requirements: [[ch.vorburger.minecraft.osgi.testplugin [8](R 8.0)] osgi.wiring.package; (osgi.wiring.package=org.spongepowered.api.command)]

我确实理解,由于OSGi的异步包初始化,何时记录失败的包启动可能并不明显,因为它可能需要等待依赖的包出现?难道它就不能..。记录这种错误,在某种宽限期之后?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-12 08:12:22

我在测试中遇到了类似的问题,然后我找到了pax测试选项,以检查所有包是否都已解决。

我所做的就是以编程的方式查看包列表,并对每个未启动的包调用start。然后,bundle.start()抛出一个异常,原因类似于上面的控制台命令。

不确定在默认情况下,felix是否也可以进行日志记录。

票数 1
EN

Stack Overflow用户

发布于 2017-06-23 16:34:37

不确定这是最好的解决方案,但它帮了我

代码语言:javascript
运行
复制
import org.osgi.framework.*;

public class Activator implements BundleActivator, BundleListener {

    public void start(BundleContext context) {
        context.addBundleListener(this);
    }

    public void stop(BundleContext context) {
        context.removeBundleListener(this);
    }

    @Override
    public void bundleChanged(BundleEvent bundleEvent) {
        if (bundleEvent.getType() == BundleEvent.UNRESOLVED) {
            System.out.println("BUNDLE " + bundleEvent.getOrigin().getSymbolicName() + " UNRESOLVED");
        try{
            System.out.println("TRYING TO START " + bundleEvent.getOrigin().getSymbolicName() + " BUNDLE");
            bundleEvent.getOrigin().start();

        } catch (BundleException e) {
            e.printStackTrace();
        }

    }
}

}

并向.bnd文件中添加激活器配置。

代码语言:javascript
运行
复制
Bundle-ClassPath: .
Bundle-Activator: com.netcracker.webportal.framework.activator.Activator
Import-Package: org.osgi.framework
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41092687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档