在恶劣的环境中运行OSGi Equinox控制台

时间:2013-06-04 06:57:55

标签: java osgi equinox

假设我有这个OSGI Equinox应用程序,我想知道捆绑包已加载,以及它们的状态。为此,我考虑过运行控制台,但我不知道该怎么做。

该应用程序具有以下文件夹结构:

workspace/
config/
features/
bundles/

config/目录包含config.ini文件以及错误日志文件和一些以插件的符号名称命名的文件夹。

我尝试从主(主页)文件夹

运行
java -jar bundles/org.eclipse.osgi_3.6.0.v20100517.jar -console -consoleLog

但我得到的只是一个

  

的OSGi> !SESSION 2013-06-04 08:57:53.023   ----------------------------------------------- eclipse.buildId = unknown java.version = 1.7.0_17 java.vendor = Oracle   公司BootLoader常量:OS = win32,ARCH = x86_64,WS = win32,   NL = en_US命令行参数:-console -consoleLog

     

!ENTRY org.eclipse.osgi 4 0 2013-06-04 08:57:53.512!MESSAGE   应用程序错误!STACK 1 java.lang.IllegalStateException:无法执行   获得应用服务。确保org.eclipse.core.runtime   bundle已解析并启动(请参阅config.ini)。           在org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:74)           在org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)           在org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)           在org.eclipse.core.runtime.adaptor.EclipseStarter.main(EclipseStarter.java:150)

提出了知道config.ini文件应该在哪里的问题。如上所述,我知道在config/有一个,虽然我知道这个RCP应用程序使用该文件作为其配置文件,但我不太确定我所启动的控制台也是如此。为什么?因为我已将以下行添加到bundles/config.ini无效:

osgi.bundles=\
org.eclipse.core.runtime@5:start \
org.bountycastle@3:start, \
org.jdom@3:start, \
org.eclipse.equinox.event@3:start, \
org.eclipse.update.configurator@2:start, \
org.eclipse.equinox.common@2:start, \
org.eclipse.equinox.ds@4:start, \
org.eclipse.equinox.util@4:start, \
org.eclipse.core.runtime@start


osgi.startLevel=10
osgi.bundles.defaultStartLevel=5

欢迎任何暗示。提前谢谢。

2 个答案:

答案 0 :(得分:2)

如果你正在使用普通的OSGi(而不是使用eclipse应用程序),你应该在config.ini中添加以下内容:

eclipse.ignoreApp=true
osgi.noShutdown=true

另外,如果您不确定使用哪个config.ini,您可以通过提供cmd arg明确定义路径:

java -jar .... -configuration <location of config.ini>

答案 1 :(得分:1)

基于config.ini的其余部分,我看到你实际上启动了org.eclipse.core.runtime两次:一次@ 5:启动,一次使用(再次)运行级别5基于默认启动级别。

您是否可以尝试删除最后一个org.eclipse.core.runtime@start并将第一个更改为运行级别1? (org.eclipse.core.runtime@1:start)(也许运行级别2也可以)。

这样,您可以确保首先启动core.runtime。