Listet programmatisch geöffnete Projekte in einem Eclipse-Arbeitsbereich außerhalb von Eclipse auf

8

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\

sehen

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.

    
lance-java 20.11.2015, 10:04
quelle

2 Antworten

3

Lesen der privaten Beschreibung zum Abrufen des Standorts

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.

Lesen des Workspace-Status zum Abrufen des Öffnungs- / Schließungsstatus

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).
  • M_OPEN wird getestet, wenn Project.isOpen() heißt
  • Die Flags zur Laufzeit befinden sich in ResourceInfo.flags
  • Die Flags werden von ResourceInfo.readFrom() aufgerufen von SaveManager.readElement()
  • Die 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.
  • Die sichere Tabelle ist Teil des internen Status von .metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources , der in einem SaveManager
Jonah Graham 20.11.2015 10:24
quelle
1

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

    
lance-java 20.11.2015 16:26
quelle

Tags und Links