Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 加载扩展点贡献中的类_Java_Eclipse_Eclipse Plugin_Eclipse Rcp - Fatal编程技术网

Java 加载扩展点贡献中的类

Java 加载扩展点贡献中的类,java,eclipse,eclipse-plugin,eclipse-rcp,Java,Eclipse,Eclipse Plugin,Eclipse Rcp,我必须从我创建的扩展点检索一个类。我的目标是使用外部化的导出插件从我的UI插件导出一个文件 我的插件A(UI)只是使用B的导出类有一个服务 我的插件B(导出插件)有一个扩展点。它的一个属性是ExportClass,必需,并请求实现IExport类的类 我的插件C(以XML格式导出)对A的extensionPoint进行了扩展。一个类将IExport实现为ExportClass属性,名为ExportXML 我的服务类Export不会加载ExportXML类,我不知道为什么。我检查了依赖项、捆绑

我必须从我创建的扩展点检索一个类。我的目标是使用外部化的导出插件从我的UI插件导出一个文件

  • 我的插件A(UI)只是使用B的
    导出
    类有一个服务
  • 我的插件B(导出插件)有一个扩展点。它的一个属性是ExportClass,必需,并请求实现
    IExport
    类的类
  • 我的插件C(以XML格式导出)对A的extensionPoint进行了扩展。一个类将
    IExport
    实现为ExportClass属性,名为
    ExportXML
我的服务类
Export
不会加载
ExportXML
类,我不知道为什么。我检查了依赖项、捆绑路径,并在build.properties文件中添加了我的org.jdom依赖项。但是,我仍然不知道,因为每次尝试启动导出时,加载类失败,并出现错误:

org.eclipse.core.runtime.CoreException:插件C无法加载类C.ExportXML 位于org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.throweException(RegistryStrategyOSGI.java:194) 位于org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:176) [...] 原因:java.lang.ClassNotFoundException:C_1.0.0.0找不到C.ExportXML 位于org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:448) 位于org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:361)

我有点说不出话来,因为我找不到错误的来源。 我用于检索插件B中的
ExportXML
类的函数是:

IExport exportClass = null;
for(IConfigurationElement contribution : this.getContributions()){
    if(contribution.getAttribute(Export_ExtensionPoint_Attribute_formatExtension).equals(formatExtension)){
        Object o;
        try {
            o = contribution.createExecutableExtension(Export_ExtensionPoint_Attribute_exportClass);
        if(o instanceof IExport)
            exportClass = (IExport) o;
        } catch (CoreException e) {
            e.printStackTrace();
        }
    }
}
以下是C plugin.xml:

注意:我可以在try中输入属性formatExtension,只是creatExecutableExtension方法失败了

build.properties文件:

source.. = src/
output.. = bin/
bin.includes = META-INF/,\
               .,\
               plugin.xml,\
               icons/,\
               lib/jdom-2.0.6.jar
MANIFEST.MF:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: XML Export
Bundle-SymbolicName: fr.enseeiht.waldo.tools.export.xml;singleton:=true
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: fr.enseeiht.waldo.tools.export.xml.Activator
Bundle-Vendor: Waldo
Require-Bundle: org.eclipse.core.runtime,
 fr.enseeiht.waldo.tools.analyzer;bundle-version="2.0.0",
 fr.enseeiht.waldo.tools.export;bundle-version="1.0.0"
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-ActivationPolicy: lazy
插件结构:


提前感谢您的帮助

在MANIFEST.MF中没有
包类路径
,这是告诉Eclipse在哪里查找目标代码所必需的。应该是这样的:

Bundle-ClassPath: .,
   lib/jdom-2.0.6.jar

在MANIFEST.MF编辑器中,您可以在“Classpath”部分的“Runtime”选项卡上进行设置。

它正在plugin
C
中的
C
包中寻找一个类
ExportXML
-这个类真的在名为
C
的包中吗?是的,它不好吗?它不是一个好名字,按照惯例,包名是小写的,但只要它是正确的,我想它是可以的。这就是错误信息的全部吗?我希望还有一个“由引起的”部分?哦,你的意思是如果“C”是插件和包的名称?不,不是,我只是修改了它来展示我的例子。但是我的文件在一个插件名为^^的包中,我刚刚在主题中添加了“原因”部分,谢谢哦,我的天啊,我刚刚发现“限定符”的名称有一个错误,我肯定把包的名称错放在了某个地方(有点像一个loooong的包名…),我要检查错误是否来自于此,但这当然是事实
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: XML Export
Bundle-SymbolicName: fr.enseeiht.waldo.tools.export.xml;singleton:=true
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: fr.enseeiht.waldo.tools.export.xml.Activator
Bundle-Vendor: Waldo
Require-Bundle: org.eclipse.core.runtime,
 fr.enseeiht.waldo.tools.analyzer;bundle-version="2.0.0",
 fr.enseeiht.waldo.tools.export;bundle-version="1.0.0"
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-ActivationPolicy: lazy
Bundle-ClassPath: .,
   lib/jdom-2.0.6.jar