[我想编写一个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\
文件
我可以调用一个Eclipse API来解析这些吗?或其他一些方法来迭代工作空间中打开的项目。
[请注意,我想在外部进行此操作而不是在Eclipse插件中进行。
由于您使用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_OPENProject.isOpen()
中Project.isOpen()
调用的ResourceInfo.flags
加载标志ResourceInfo.flags
的ResourceInfo.readFrom()
ResourceInfo.readFrom()
来自存储在SaveManager.readElement()
中工作区元目录中的元素树。要使用的文件的特定版本(id)记录在安全表SaveManager.readElement()
DataInput
内部状态的一部分,存储在DataInput
中我设法使用input
作为参考来解析文件
readElement
遗憾的是,这似乎无法检测项目是否已关闭。任何获得关闭标志的指针将不胜感激