# Wer kennt sich mit der Eclipse API aus?



## hdi (25. Feb 2010)

Hi,
ich schreibe gerade an einem Eclipse Plugin - genauer für den EPF Composer. Nun muss ich die API von Eclipse benutzen um die Anwendung umsetzen zu können. u.A. will ich ein Projekt im Workspace erstellen, also programmatisch. Aber ich weiss nicht so recht wie bzw. bei mir kackt Eclipse ab. Ich benutze folgende API:

Generated Documentation (Untitled)

Ich habe dann folgendes versucht:

```
IProject project = MethodLibraryProject.createProject("C:/test", "Test Project", null);
```
Die Anweisung wird niemals zu Ende ausgeführt, d.h. hier bleibt er hängen. 

Dann hab ich im Inet noch das hier gefunden:

```
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
				IProject project = root.getProject("Test-Project");
				project.create(null);
				project.open(null);
```
Auch hier: in der ersten Anweisung bleibt er irgendwo stecken und kommt nicht weiter. Etwa jedes zweite mal stürzt mir die komplette Debug-Application ab mit einem schweren VM-Fehler.

Hier einfach mal eine grundsätzliche Frage: Verwende ich die richtige API oder nicht? Wieso bleibt er immer hängen? Wie erstellt man denn ein Projekt im Workspace programmatisch?
Hat vllt irgendwer einen Link zu einem Crashkurs darüber wie man die Eclipse API nutzt? Vllt Beispiele?

Danke!


----------



## Wildcard (25. Feb 2010)

Die zweite Variante ist korrekt. WEnn du einen VM crash hast, ist das ein Bug in der VM. Ein Update kann helfen.


----------



## hdi (9. Mrz 2010)

Also ich hab das ganze jetzt nochmal auf meinem Eclipse daheim probiert.. Aber das geht nicht. Bei


```
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
```

bleibt er einfach hängen, d.h. ein sysout davor wird angezeigt, eins danach nicht mehr. Wenn ich es dann nochmal versuche kommt dieser VM Crash, vermutlich weil er eh schon hängt. 

Ich hab den Code nun aus dem Plugin rausgenommen und normal in eine main-Methode geschrieben. Folgender Fehler beim Aufruf:



> Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/core/runtime/Plugin
> at java.lang.ClassLoader.defineClass1(Native Method)
> at java.lang.ClassLoader.defineClass(Unknown Source)
> at java.security.SecureClassLoader.defineClass(Unknown Source)
> ...



Ich hab die 2 Packages 
	
	
	
	





```
eclipse.core.resources.win32
```
 und 
	
	
	
	





```
eclipse.core.resources.3_5_1
```
 ins Projekt eingebunden, d.h. er müsste die Klassen schon kennen? Ist ja auch kein compile-Error.

Könnt ihr das mal bei euch versuchen?


----------



## Wildcard (9. Mrz 2010)

Du darfst bei einem Plugin *niemals* den Java Build Path verändern. Der Classpath ergibt sich aus der Manifest.MF (import package und require bundle)


----------



## hdi (17. Mrz 2010)

Okay danke, das geht jetzt. Ich hab aber noch immer n Problem - ich brauche Libraries aus dem EPF. Das EPF ist natürlich separat zu Eclipse installiert, und ich kann aber im Dialgo der Manifest-Datei scheinbar nur Libraries auswählen die in Eclipse sind.
Hab schon versucht die Libs vom EPF Ordner nach Eclipse zu ziehen, sowohl in Plugins als auch Features Ordner, aber ich kann sie nicht auswählen.

Wie binde ich in der Mafinest externe Libs ein?

Danke!


----------



## Wildcard (17. Mrz 2010)

Du musst eine Target Platform definieren. Entweder über die Preferences oder über ein Target Definition File. Deine Bundles werden immer gegen die Target Platform kompiliert, wenn du keine explizite angibst wird die running Eclipse instance verwendet.


----------



## hdi (18. Mrz 2010)

Danke, also ich hab das jetz getan und das EPF Installment zusätzlich hunzugefügt, im Reiter "Content" sind jetzt also bei der Target Platform auch alle Packages aus dem EPF.
Dadurch kann ich nun weitere Packages als Dependency in der Manifest angeben - eig. passt alles. Leider nur _eigentlich_, denn ich hab folgendes Problem:

Ich möchte folgende Klasse nutzen:
NewMethodPluginWizard

Das package org.eclipse.epf.authoring.ui.wizards hab ich bei den Dependencies in der Manifest geaddet, trotzdem kann er die Klasse nicht finden??


----------



## hdi (15. Apr 2010)

So ich meld mich mal wieder, es scheint noch zu dauern bis ich durch dieses Plugin-Thema durchsteige. Nachdem wir ja schon geklärt hatten dass ich Epf als Target Platform einbinden muss um in der Mainfest-Datei des Plugins die Bibliotheken daraus importieren zu können, gings ja. *Ging's*. Jetzt geht's nicht mehr -- ich hatte den PC neu gemacht und halt wieder Eclipse drauf getan und meinen alten Workspace verwendet, und eben wieder bei der Target Platform EPF eingebunden.

Es werden mir auch keine Fehler im Projekt angezeigt, allerdings wenn ich das ganze starten will als Eclipse Application:




Irgendwie hängt das zusammen mit der Target Platform. Ich hab halt Add -> Installment gemacht und dort den Pfad zu EPF angegeben. Er findet dann auch alle Libs usw und in meinem Projekt meckert er nicht dass er etwas nicht kennt. Allerdings kommt dann eben der o.g. Fehler, auch bei anderen Plugins (zB beim Hello-World Plugin).
Wenn ich als Target Platform wieder Standard nehme also nur Eclipse, geht das Hello-World Bsp wieder. Aber mein anderes natürlich nicht weil ich dann schon zur Compile-Zeit Fehler krieg dass er die eingebundenen Libs nicht findet.

Um das ganze noch verwirrender für mich zu gestalten ist es außerdem so dass das Hello-World Plugin manchmal auch mit der erweiterten Target Platform (also Eclipse + EPF) funzt, macnhmal kommt auch da der Fehler.
Und auch bei meinem eigenen Plugin kommt nur manchmal der Fehler, manchmal startet die App auch normal allerdigns wird mein Plugin halt nicht angezeigt.

Woher kommt das nun auf einmal, ich kann mich nicht dran erinnern irgendwas umgestellt zu haben? Ich steig da gar nicht mehr durch. Nochmal wie ich's jetzt verstanden und umgesetzt hab:

1) Neue Target Platform definieren die sowohl Eclipse als auch die EPF Libs hat, und diese setzen
2) Bei den Extensions im Plugin die nötigen Libs adden die darin gebraucht werden
Sollte doch gehen? Ich krieg ja auch keine Fehler zur Compile-Zeit...

Naja könnt ihr mit dem Fehler was anfangen? 

*Danke!*

PS:Hab auch versucht Eclipse runterzuhauen und neu zu ziehen - aber noch immer der selbe Fehler.


----------



## Wildcard (15. Apr 2010)

PDE ist dafür verantwortlich den Java Build Path zu justieren. Manchmal kommt PDE durcheinander und der Java Build Path wird ungültig. In diesem Fall mach einen Rechtsklick aufs Projekt -> PDE Tools -> Update Classpath


----------

