捆绑包 XYZ 无法解析。原因:缺少约束:Import-Package:ABC;无头 RCP 独立版本中的 version="1.0.0" 错误
Posted
技术标签:
【中文标题】捆绑包 XYZ 无法解析。原因:缺少约束:Import-Package:ABC;无头 RCP 独立版本中的 version="1.0.0" 错误【英文标题】:The bundle XYZ could not resolved. Reason: Missing Constraint: Import-Package: ABC; version="1.0.0" error in headless RCP standalone 【发布时间】:2012-12-31 05:52:35 【问题描述】:我正在处理standalone headless RCP。当我在eclipse IDE中执行应用程序和产品时,它可以正常工作,但是当我导出并执行它时,我在日志文件中得到了这个错误。
!ENTRY org.eclipse.equinox.ds 4 0 2013-01-16 13:27:59.132
!MESSAGE FrameworkEvent ERROR
!STACK 0
org.osgi.framework.BundleException: The bundle "org.eclipse.equinox.ds_1.4.0.v20120522-1841 [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)
...
!ENTRY org.eclipse.equinox.ds 4 0 2013-01-16 13:28:00.901
!MESSAGE [SCR] Exception while activating instance org.eclipse.e4.ui.css.swt.internal.theme.ThemeEngineManager@6b8d6157 of component org.eclipse.e4.ui.css.swt.theme
!STACK 0
java.lang.NoClassDefFoundError: org/eclipse/swt/widgets/Display
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2442)
参考this post,我了解到我有一个更新版本的插件,没有它的依赖项,运行时路径有问题。但是,我不确定究竟是什么导致了这个错误。
可能出了什么问题?为什么我只有在独立执行时才会出现此错误?
添加
我有 build.properties 文件
output.. = bin/
bin.includes = META-INF/,\
plugin.xml,\
.
source.. = src/
这是 MANIFEST.MF 文件
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Refactorer
Bundle-SymbolicName: edu.utexas.seal.refactorer;singleton:=true
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: edu.utexas.seal.refactorer.Activator
Bundle-Vendor: PROSSEEK
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Bundle-ActivationPolicy: lazy
Require-Bundle: org.eclipse.core.runtime;bundle-version="3.8.0",
org.eclipse.jdt;bundle-version="3.8.0",
org.eclipse.jdt.core;bundle-version="3.8.2",
org.eclipse.core.resources;bundle-version="3.8.1",
org.eclipse.text;bundle-version="3.5.200",
org.eclipse.jdt.ui;bundle-version="3.8.1",
org.eclipse.jdt.core.manipulation;bundle-version="1.5.0",
org.eclipse.ltk.ui.refactoring;bundle-version="3.7.0",
org.eclipse.jdt.core.manipulation;bundle-version="1.5.0",
org.eclipse.ltk.core.refactoring;bundle-version="3.6.0",
org.eclipse.jface.text;bundle-version="3.8.1",
org.eclipse.core.expressions;bundle-version="3.4.401",
org.eclipse.core.externaltools;bundle-version="1.0.100",
org.eclipse.jface;bundle-version="3.8.101",
edu.utexas.seal.utilities;bundle-version="1.0.0",
org.eclipse.core.filebuffers;bundle-version="3.5.200"
Bundle-ClassPath: .
Export-Package: edu.utexas.seal.refactorer
我只有一项:“。”在 Bundle-ClassPath 中。
【问题讨论】:
您的 build.properties 文件和插件 MANIFEST.MF 的内容是什么? build.properties 中的 src 和 bin 路径可能有问题,或者 MANIFEST.MF 中的 Bundle-ClassPath 字段可能有问题 @jluzwick:我更新了我的 OP。谢谢。 嗯,看起来不错。我遇到了与您提到的类似的问题。在我的 Manifest.MF 文件中,我还包含 Export-Package: 和 Import-Package: 语句,但我不确定这是否能解决您的问题。另外我不确定这是否需要在 Require-Bundle 中:“rg.eclipse.equinox.ds_1.4.0.v20120522-1841 [3]” @jluzwick:我解决了这个问题,感谢有用的提示。 【参考方案1】:缺少 org.eclipse.equinox.util
我首先重新编译了项目,然后从日志文件中的投诉中检查了我是否拥有所有必需的插件,然后我发现我缺少org.eclipse.equinox.util
,我想它应该是自动包含的。包含之后,一些错误就消失了,我发现我还有两个错误。
执行环境问题
我将“执行环境”设置为 JavaSE-1.5,这是一个问题,因为 Java 无法识别 @Override 导致“必须覆盖超类方法”错误。
我从这个网站得到了提示。
'Must Override a Superclass Method' Errors after importing a project into Eclipse
运行时级别
我还必须更改 /ECLIPSE/configuration/config.ini
文件。
osgi.bundles=org.eclipse.equinox.common@2:start,org.eclipse.update.configurator@3:
start,org.eclipse.equinox.ds@3 <-- (From 2 to 3)
:start,org.eclipse.core.runtime@start
不知道是不是eclipse的bug,我得到了this site的提示。
我发现一些有用的提示
-consoleLog
非常有用,因为我不必一直打开日志文件。
This article 给了我一些解决问题的方向。
我想一旦 eclipse RCP 作为一个产品在 eclipse IDE 上运行,我们应该可以使用独立的 RCP。如果不是,那么问题应该是在 IDE 和独立之间产生差异的配置问题。
【讨论】:
【参考方案2】:还可以通过额外的依赖配置将丢失的包直接添加到失败的包中:
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>target-platform-configuration</artifactId>
<version>$tycho.version</version>
<configuration>
<dependency-resolution>
<extraRequirements>
<requirement>
<type>eclipse-plugin</type>
<id>org.eclipse.jface.text</id>
<versionRange>0.0.0</versionRange>
</requirement>
</extraRequirements>
</dependency-resolution>
</configuration>
</plugin>
【讨论】:
【参考方案3】:您需要将相同的内容添加到您的 feature.xml 文件中。 添加相同内容后,清理项目并尝试重新构建。 我相信这将解决这个问题。
【讨论】:
以上是关于捆绑包 XYZ 无法解析。原因:缺少约束:Import-Package:ABC;无头 RCP 独立版本中的 version="1.0.0" 错误的主要内容,如果未能解决你的问题,请参考以下文章
捆绑包 UITests 无法加载,因为它已损坏或缺少必要的资源。尝试重新安装捆绑包
捆绑包 UITests 无法加载,因为它已损坏或缺少必要的资源。尝试重新安装捆绑包