在将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,所以不使用我们在这种情况下可以做什么?