来自Eclipse插件的静态方法调用:InjectionException

时间:2014-04-28 09:09:45

标签: eclipse eclipse-plugin eclipse-rcp static-methods noclassdeffounderror

我有2个插件项目 - generator.ui和generator.core。 generator.ui依赖于generator.core插件进行进程和数据操作。但是,如果在generator.core上进行API调用(通过静态方法调用),我会得到一个下面提到的异常:

org.eclipse.e4.core.di.InjectionException: java.lang.NoClassDefFoundError: de/upb/crc901/serge/generator/Generator
at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:63)
at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:243)
at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:224)
at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:132)
at org.eclipse.e4.core.commands.internal.HandlerServiceHandler.execute(HandlerServiceHandler.java:167)
at org.eclipse.core.commands.Command.executeWithChecks(Command.java:499)
at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508)
at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:213)
at org.eclipse.e4.ui.workbench.renderers.swt.HandledContributionItem.executeItem(HandledContributionItem.java:850).........
Caused by: java.lang.ClassNotFoundException: de.upb.crc901.serge.generator.Generator cannot be found by de.upb.crc901.serge.ui_1.0.0.qualifier
at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:501)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412)
at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
at java.lang.ClassLoader.loadClass(Unknown Source)

现在这个NoClassDefFoundError总是出现在包含用于创建对象的静态方法的类中,因为接下来的设计模式是" Singleton"。

非常感谢任何帮助。

这是代码,来自UI插件;配置集线器类:

public class ConfigurationHub implements IConfigurationHub {
private IGenerator generator;
private static IConfigurationHub configurationHub;

/*
 * Constructor private to make Singleton
 */
private ConfigurationHub() {
    generator = GeneratorFactory.createGenerator(Generator.class);
}

public static synchronized IConfigurationHub getInstance() {
    if(null == configurationHub) {
        configurationHub = new ConfigurationHub();
    }
    return configurationHub;
}
}

GeneratorFactory类在Generator插件中:

public class GeneratorFactory {
private GeneratorFactory() {}
public static <T extends IGenerator> T createGenerator(Class<T> type) {
    try {
        return (T) type.newInstance();
    } catch (InstantiationException e) {
        e.printStackTrace();
        return null;
    } catch (IllegalAccessException e) {
        e.printStackTrace();
        return null;
    }
}
}

此致 SID

0 个答案:

没有答案