我在嵌入模式下使用Felix,使用File Install软件包,并且有一个已安装但未解决的软件包(因此不是正在启动/活动),而且我比我想的更难以找到根本原因在日志中......
如何/在哪里获得那些有用的看起来“无法解决...因为...”或“BundleException:捆绑中未解决的约束...无法解决...缺少要求... osgi.wiring.package”类日志中的消息,自动来自Felix框架和/或文件安装包?我没有看到类似的东西 - 我应该吗?哪里?
我还添加了日志记录(通过Apache Felix Log和osgi-loglistener-slf4j),但仍然是nada - 你需要做的比我在(嵌入式)Felix中为这种问题启用日志记录做的更多吗?
我随后添加了Felix Gogo Shell CLI,发现它的 inspect
命令也不是很有用(对于未解析的bundle不起作用),只有 start
会显示根本原因 - 但我怎么能得到这是为了记录,而不必拥有一个控制台并开始:
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的异步捆绑初始化,可能不明白何时记录失败的捆绑启动,因为它可能需要等待依赖捆绑包出现?难道它还没有..在某种宽限期后记录这种错误?
2 回答
在我找到pax考试选项来检查所有捆绑包是否已解决之前,我在测试中遇到了类似的问题 .
我所做的是以编程方式浏览bundle列表,并在每个未启动的bundle上调用start . bundle.start()然后抛出一个异常,原因就像上面的console命令一样 .
不确定felix是否可以设置为默认情况下也记录此项 .
不确定这是最好的解决方案,但它帮助了我
}
并将activator配置添加到.bnd文件