Platform.getBundle()在eclipse火星中不起作用

时间:2016-09-19 14:20:15

标签: java eclipse-rcp

在将RCP应用程序从Eclipse Indigo(3.x)迁移到Eclipse Mars(4.5.2)期间,我遇到了一个问题。

Platform.getBundle()返回null。

我发现有一个文件bundles.info是在" d:/Workspace/.metadata/.plugins/org.eclipse.pde.core/test.product/org.eclipse.equinox.simpleconfigurator"文件夹中。

我的项目中有10个插件。

所有插件和必需jar的信息都出现在 bundles.info 文件中。但是在bundles.info文件中缺少一个插件(com.testPlugin),因为Platform.getBundle()返回null。

信息是这样的:
com.firstPlugin,6.1.1.qualifier,文件:/ d:/data/com.firstPlugin,4,false

这段代码写得像这样:

/**
 * Returns the actual absolute path of a given fragment depending on the
 * launching mode of Product.
 * 
 * @param fragmentID
 *            The symbolic name of a fragment, e.g.
 *            "com.test.design".
 * @return An {@code IPath} that contains the absolute path of given
 *         fragmentID regarding launching mode, or {@code null} if fragment
 *         is not found.
 */

public static IPath getFragmentPath(String fragmentID) {
    IPath fragmentPath = fragments.get(fragmentID);

    if (fragmentPath == null || fragmentPath.isEmpty()) {

        Bundle bundle = Platform.getBundle(fragmentID);
        if (bundle == null) {
            fragmentPath = new Path(Constants.getAppPath()).append(
                    "plugins/").append(fragmentID);
        } else {
            try {
                fragmentPath = new Path(FileLocator.toFileURL(
                        bundle.getEntry("/")).getPath());
            } catch (IOException err) {
                ExceptionReporter.defaultReport(err);
                return null;
            }
        }
        fragments.put(fragmentID, fragmentPath);
    }

    return fragmentPath;
}

该插件的 fragmentID 与其名称相同,即。 com.testPlugin但由于它在bundles.info文件中缺失,因此Platform.getBundle(fragmentID)返回null,因此我无法获得正确的路径。

我唯一担心的是为什么在bundles.info中缺少这个插件/包。

相同的代码在eclipse indigo中工作,但不在eclipse Mars(4.5.2)

Eclipse Indigo到Eclipse Mars是否发生了任何API更改。 或者我可以使用哪种替代方案?我没有BundleContext,所以不使用我们在这种情况下可以做什么?

0 个答案:

没有答案