在Luna上构建的Eclipse RCP应用程序有时会错过Windows 10上的捆绑包

时间:2016-02-25 15:18:16

标签: java eclipse eclipse-rcp

我有一个基于Eclipse Luna 4.4构建的Eclipse RCP应用程序。

这是一个在GitHub上托管的开源项目:https://github.com/andreafeccomandi/bibisco,可执行文件可以在here下载。

该应用程序通常在Windows 10中运行良好,但在某些 Windows 10 PC上不会出现此错误:

!SESSION 2016-02-14 13:37:46.274 -----------------------------------------------
eclipse.buildId=unknown
java.version=1.6.0_26
java.vendor=Sun Microsystems Inc.
BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=en_US
Command-line arguments: -os win32 -ws win32 -arch x86 -data @none

!ENTRY org.eclipse.equinox.ds 4 0 2016-02-14 13:37:47.563
!MESSAGE FrameworkEvent ERROR
!STACK 0
org.osgi.framework.BundleException: The bundle "org.eclipse.equinox.ds_1.4.101.v20130813-1853 [3]" could not be resolved. Reason: Missing Constraint: Import-Package: org.eclipse.equinox.internal.util.event; version="1.0.0"
at org.eclipse.osgi.framework.internal.core.AbstractBundle.getResolverError(AbstractBundle.java:1332)
at org.eclipse.osgi.framework.internal.core.AbstractBundle.getResolutionFailureException(AbstractBundle.java:1316)
at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:323)
at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:390)
at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1176)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:559)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:544)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:457)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:438)
at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:1)
at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)

应用程序自带JRE(1.6.0_26),config.ini为:

#Product Runtime Configuration File
eclipse.application=bibisco.application
osgi.bundles.defaultStartLevel=4
eclipse.product=bibisco.product
osgi.splashPath=platform:/base/plugins/bibisco
osgi.bundles=org.eclipse.equinox.common@2:start,org.eclipse.update.configurator@3:start,org.eclipse.equinox.ds@2:start,org.eclipse.core.runtime@start

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我看了一下该项目的MANIFEST.MF,我可以看到该项目正在宣布使用Java 7。

Bundle-RequiredExecutionEnvironment: JavaSE-1.7

但是看看你的日志,似乎你(运送和)运行Java 1.6的应用程序

java.version=1.6.0_26

所以,我和Modus Tollens有着相同的观点,我的理论是修复Java版本可以解决错误。

因此,我认为您可以通过使用Java 1.7分发应用程序来解决这个问题。如果这不是一个选择;你应该声明在清单中使用Java 1.6,并因此修复依赖关系。

答案 1 :(得分:0)

我认为这个非确定性错误将通过在启动配置中设置启动级别来解决,如下所述: http://www.vogella.com/tutorials/EclipseRCP/article.html#plugin_startlevels

详细信息:

日志中的主要错误是:eclipse Missing Constraint:Import-Package:org.eclipse.equinox.internal.util.event;版本= “1.0.0”

我在网上找到了一些相关的指示:topic on eclipse forumsa comment on an eclipse bug。后一指针建议使用以下设置来解决错误:

<configurations>
 <plugin id="org.eclipse.core.runtime" autoStart="true" startLevel="4" />
 <plugin id="org.eclipse.equinox.common" autoStart="true" startLevel="2"/>
 <plugin id="org.eclipse.equinox.ds" autoStart="true" startLevel="2" />
 <plugin id="org.eclipse.equinox.simpleconfigurator" autoStart="true" startLevel="1" />
 <plugin id="org.eclipse.update.configurator" autoStart="true" startLevel="4" />
 <property name="org.eclipse.update.reconcile" value="false" />
</configurations>

这可能是由初始加载阶段的问题引起的,可以通过更改启动配置和设置启动级别来解决,如下所示:

与Vogella教程Eclipse RCP > set start levels中的设置完全相同。

enter image description here