如何从 IProject 中获取 Bundle-SymbolicName?

How to get the Bundle-SymbolicName from an IProject?

我正在为 eclipse 项目编写一个向导,并希望在 Manifest.MF.

中包含另一个插件 Require-Bundle

我有要包含的 IProject,我可以在不解析 Manifest.MF 的情况下访问它的 Bundle-SymbolicName 吗?或者还有其他方法可以避免手动解析吗?

一个IProject可能不代表插件,也没有任何直接API获取插件id。

您可以使用正常的 Java Manifest class 来查看 MANIFEST.MF 使用类似的东西:

IProject project = ...

IFile manifestResource = project.getFile(new Path("META-INF/MANIFEST.MF"));
if (manifestResource.exists()) {
    try (InputStream stream = manifestResource.getContents()) {
        Manifest manifest = new Manifest();
        manifest.read(stream);

        String symbolicName = manifest.getMainAttributes().getValue("Bundle-SymbolicName");
    } catch (CoreException | IOException ex) {
       ...
    }
}

此代码改编自 Eclipse PDE 用于查找插件的代码。