eclipse4 RCP 片段 "Unable to load class from bundle"
eclipse4 RCP Fragment "Unable to load class from bundle"
我目前正在尝试将 Eclipse 3 RCP 应用程序迁移到 e4。该项目基于一个主插件项目和几个片段项目。我正在使用 Eclipse Mars 进行开发。以下描述基于我为此创建的示例项目。
主应用程序提供了一个简单的菜单,其中包含一些已处理的菜单项。该片段应为此添加更多菜单项。但是我得到一个异常告诉我,分配的处理程序 class 无法加载:
!ENTRY org.eclipse.e4.ui.workbench 4 0 2015-10-15 17:44:04.540
!MESSAGE Unable to load class 'de.fragment.Handler' from bundle '61'
!STACK 0
java.lang.ClassNotFoundException: Can not load a class from a fragment bundle: E4TestFragment_1.0.0.qualifier [61]
两个项目的结构大致如下。
主应用程序(eclipse 插件项目):
- META-INF/MANIFEST.MF
- Application.e4xmi
- plugin.xml
MANIFEST.MF内容:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: E4Test3
Bundle-SymbolicName: E4Test3;singleton:=true
Bundle-Version: 1.0.0.qualifier
Require-Bundle: javax.inject;bundle-version="1.0.0",
org.eclipse.core.runtime;bundle-version="3.11.0",
org.eclipse.swt;bundle-version="3.104.0",
org.eclipse.e4.ui.model.workbench;bundle-version="1.1.100",
org.eclipse.jface;bundle-version="3.11.0",
org.eclipse.e4.ui.services;bundle-version="1.2.0",
org.eclipse.e4.ui.workbench;bundle-version="1.3.0",
org.eclipse.e4.core.di;bundle-version="1.5.0",
org.eclipse.e4.ui.di;bundle-version="1.1.0",
org.eclipse.e4.core.contexts;bundle-version="1.4.0",
org.eclipse.e4.ui.workbench.swt;bundle-version="0.13.0",
org.eclipse.e4.ui.workbench.renderers.swt;bundle-version="0.13.0"
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-ClassPath: .
片段(日食片段项目):
- de/fragment/Handler.java
- META-INF/MANIFEST.MF
- 片段.e4xmi
- fragment.xml
MANIFEST.MF内容:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: E4TestFragment
Bundle-SymbolicName: E4TestFragment;singleton:=true
Bundle-Version: 1.0.0.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Fragment-Host: E4Test3;bundle-version="1.0.0"
Export-Package: de.fragment
Bundle-ClassPath: .
片段.e4xmi 本身被正确评估。我通过从菜单项中删除处理程序来检查这一点,然后将图标添加到 gui。
老实说,我不知道是什么导致了这个异常。你们有谁有想法可以帮助我吗?
提前致谢
我认为您可能混淆了 Eclipse 插件中 'fragment' 的两个含义。
你有一个 fragment.e4xmi
,它是 'fragment' 的 e4 含义 - e4 模型的一个片段。
然后您将其放入 'fragment' 插件中。片段插件是片段的不同含义,不是普通的插件。事实上,它们根本不是单独的插件(相反,它们只是主机插件的一部分)。
将您的 E4TestFragment 更改为普通插件。
我目前正在尝试将 Eclipse 3 RCP 应用程序迁移到 e4。该项目基于一个主插件项目和几个片段项目。我正在使用 Eclipse Mars 进行开发。以下描述基于我为此创建的示例项目。
主应用程序提供了一个简单的菜单,其中包含一些已处理的菜单项。该片段应为此添加更多菜单项。但是我得到一个异常告诉我,分配的处理程序 class 无法加载:
!ENTRY org.eclipse.e4.ui.workbench 4 0 2015-10-15 17:44:04.540
!MESSAGE Unable to load class 'de.fragment.Handler' from bundle '61'
!STACK 0
java.lang.ClassNotFoundException: Can not load a class from a fragment bundle: E4TestFragment_1.0.0.qualifier [61]
两个项目的结构大致如下。
主应用程序(eclipse 插件项目):
- META-INF/MANIFEST.MF
- Application.e4xmi
- plugin.xml
MANIFEST.MF内容:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: E4Test3
Bundle-SymbolicName: E4Test3;singleton:=true
Bundle-Version: 1.0.0.qualifier
Require-Bundle: javax.inject;bundle-version="1.0.0",
org.eclipse.core.runtime;bundle-version="3.11.0",
org.eclipse.swt;bundle-version="3.104.0",
org.eclipse.e4.ui.model.workbench;bundle-version="1.1.100",
org.eclipse.jface;bundle-version="3.11.0",
org.eclipse.e4.ui.services;bundle-version="1.2.0",
org.eclipse.e4.ui.workbench;bundle-version="1.3.0",
org.eclipse.e4.core.di;bundle-version="1.5.0",
org.eclipse.e4.ui.di;bundle-version="1.1.0",
org.eclipse.e4.core.contexts;bundle-version="1.4.0",
org.eclipse.e4.ui.workbench.swt;bundle-version="0.13.0",
org.eclipse.e4.ui.workbench.renderers.swt;bundle-version="0.13.0"
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-ClassPath: .
片段(日食片段项目):
- de/fragment/Handler.java
- META-INF/MANIFEST.MF
- 片段.e4xmi
- fragment.xml
MANIFEST.MF内容:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: E4TestFragment
Bundle-SymbolicName: E4TestFragment;singleton:=true
Bundle-Version: 1.0.0.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Fragment-Host: E4Test3;bundle-version="1.0.0"
Export-Package: de.fragment
Bundle-ClassPath: .
片段.e4xmi 本身被正确评估。我通过从菜单项中删除处理程序来检查这一点,然后将图标添加到 gui。
老实说,我不知道是什么导致了这个异常。你们有谁有想法可以帮助我吗?
提前致谢
我认为您可能混淆了 Eclipse 插件中 'fragment' 的两个含义。
你有一个 fragment.e4xmi
,它是 'fragment' 的 e4 含义 - e4 模型的一个片段。
然后您将其放入 'fragment' 插件中。片段插件是片段的不同含义,不是普通的插件。事实上,它们根本不是单独的插件(相反,它们只是主机插件的一部分)。
将您的 E4TestFragment 更改为普通插件。