以编程方式从Eclipse外部列出Eclipse工作区中的打开项目

问题描述 投票:10回答:2

[我想编写一个Gradle插件,它可以检查Eclipse工作区目录并遍历工作区中打开的项目并确定每个项目的位置。

类似

Workspace workspace = EclipseUtils.parseWorkspace("c:/myEclipseWorkspace");
Collection<Project> projects = workspace.getProjects();
for (Project project : projects) {
   System.out.println(String.format("name=%s, location=%s, open=%s",
      project.getName(), project.getLocation(), project.isOpen()));
}

我看过我的工作区,可以在.location下看到一些c:\myEclipseWorkspace\.metadata\.plugins\org.eclipse.core.resources\.projects\文件

但是这些文件是自定义二进制格式enter image description here

我可以调用一个Eclipse API来解析这些吗?或其他一些方法来迭代工作空间中打开的项目。

[请注意,我想在外部进行此操作而不是在Eclipse插件中进行。

java eclipse parsing workspace
2个回答
3
投票

阅读私人描述以获取位置

由于您使用Java编写,所以请从外部位置重新使用Eclipse代码。

即从org.eclipse.core.resources.ResourcesPlugin中拉出一些键控代码。从org.eclipse.core.resources.ResourcesPlugin.getWorkspace()的隐含符号开始,然后逐步进入org.eclipse.core.resources.IWorkspaceRoot.getProjects()

上面的代码在这里读取项目描述:org.eclipse.core.internal.resources.LocalMetaArea.readPrivateDescription(IProject, ProjectDescription),并且从org.eclipse.core.internal.localstore.FileSystemResourceManager.read(IProject, boolean)调用它,它具有一些有关默认位置的逻辑。

这是EPL的乐趣,只要您的新程序/功能是EPL,您就可以重用Eclipse的核心代码来做新的奇妙的事情。

读取工作区状态以获取打开/关闭状态

读取工作空间状态时,您正在进入ElementTree数据结构。在不使用ElementTree类的情况下读取此信息可能是不现实的。在没有完整OSGi的情况下使用ElementTree类可能是不现实的。我提供以下说明,以帮助您。

向后工作:

  • [ICoreConstants.M_OPEN是表示项目处于打开还是关闭状态(设置为打开,清除为关闭)的标志值]
  • 调用ICoreConstants.M_OPEN时测试M_OPEN
  • 运行时的标志位于Project.isOpen()
  • [通过Project.isOpen()调用的ResourceInfo.flags加载标志
  • 传递给ResourceInfo.flagsResourceInfo.readFrom() ResourceInfo.readFrom()来自存储在SaveManager.readElement()中工作区元目录中的元素树。要使用的文件的特定版本(id)记录在安全表SaveManager.readElement()
  • 安全表是DataInput内部状态的一部分,存储在DataInput

1
投票

我设法使用input作为参考来解析文件

readElement

遗憾的是,这似乎无法检测项目是否已关闭。任何获得关闭标志的指针将不胜感激

© www.soinside.com 2019 - 2024. All rights reserved.