Ich möchte ein Gradle-Plugin schreiben, das ein Eclipse-Arbeitsbereichsverzeichnis untersuchen und über die geöffneten Projekte innerhalb des Arbeitsbereichs iterieren und deren Position bestimmen kann.
Etwas wie
%Vor% Ich habe meinen Arbeitsbereich angesehen und kann einige .location
-Dateien unter c:\myEclipseWorkspace\.metadata\.plugins\org.eclipse.core.resources\.projects\
Aber diese Dateien sind ein benutzerdefiniertes Binärformat
Gibt es eine Eclipse-API, die ich aufrufen kann, um diese zu analysieren? Oder eine andere Lösung, um die geöffneten Projekte in einem Arbeitsbereich zu iterieren.
Bitte beachten Sie, dass ich dies extern zu Eclipse und NICHT innerhalb eines Eclipse-Plugins machen möchte.
Da Sie in Java schreiben, können Sie den Eclipse-Code von Ihrem externen Speicherort wiederverwenden.
d. Ziehen Sie einen Teil des Schlüsselcodes aus org.eclipse.core.resources.ResourcesPlugin
. Beginne mit dem Impl von org.eclipse.core.resources.ResourcesPlugin.getWorkspace()
und arbeite dich dann zu org.eclipse.core.resources.IWorkspaceRoot.getProjects()
Der obige Code liest die Projektbeschreibung hier: org.eclipse.core.internal.resources.LocalMetaArea.readPrivateDescription(IProject, ProjectDescription)
und die von org.eclipse.core.internal.localstore.FileSystemResourceManager.read(IProject, boolean)
aufgerufen wird, die eine gewisse Logik über Standardspeicherorte hat.
Dies ist die Freude an EPL, solange Ihr neues Programm / Feature EPL ist, können Sie den Kerncode von Eclipse wiederverwenden, um neue und wundervolle Dinge zu tun.
Wenn Sie den Arbeitsbereichsstatus lesen, wechseln Sie zu ElementTree Datenstrukturen. Dies zu lesen, ohne die ElementTree-Klassen zu verwenden, ist wahrscheinlich unrealistisch. Die Verwendung der ElementTree-Klassen ohne vollständiges OSGi ist wahrscheinlich unrealistisch. Ich gebe die folgenden Hinweise, um Ihnen auf Ihrem Weg zu helfen.
Rückwärts arbeiten:
ICoreConstants.M_OPEN
ist der Flag-Wert, der angibt, ob das Projekt offen oder geschlossen ist (für offen, für geschlossen). Project.isOpen()
heißt ResourceInfo.flags
ResourceInfo.readFrom()
aufgerufen von SaveManager.readElement()
DataInput
input
wurde an% co_de übergeben % wird aus dem Elementbaum im Metaverzeichnis des Arbeitsbereichs in readElement
gespeichert. Die spezifische Version (ID) der zu verwendenden Datei wird in der sicheren Tabelle .metadata/.plugins/org.eclipse.core.resources/.root/<id>.tree
aufgezeichnet.
.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources
, der in einem SaveManager
Ich habe es geschafft, die Datei mit dies als Referenz
%Vor%Leider scheint dies nicht in der Lage zu sein zu erkennen, ob ein Projekt geschlossen ist oder nicht. Irgendwelche Hinweise auf das Erhalten der geschlossenen Flagge würden sehr geschätzt werden