# Versionsprobleme beim Erstellen eines Plugins



## schnurpsel (1. Feb 2010)

Hallo,

habe eine grundsätzliche Frage zur Entwicklung von Plugins zu bestehenden Anwendungen.

Ich erstelle ein Plugin zu einer Eclipse3.3-Anwendung, welche als TargetPlatform angegeben ist. Das funktionierte bisher soweit auch ganz gut. Nun möchte ich in meinem Plugin EMF für Eclipse 3.5 verwenden. Also Eclipse 3.5 installiert, Quellcode geladen und als TargetPlatform zusätzlich Eclipse 3.5 angegeben. Nun bekomme ich "Package uses conflict". Sobald ich diese Packages aus der TargetPlatform manuell entferne (Häkchen raus), werden die anderen Klassen nicht mehr erkannt.

Wie geht man mit diesem Fall um? Ich vermute, dass es nicht so gedacht ist, dass ich einfach die Anwendung und Eclipse als TargetPlatform eintrage. Aber ich weiß auch nicht, wie man es richtig macht :bahnhof:

Viele Grüße
schnurpsel


----------



## Wildcard (1. Feb 2010)

Gibt es einen Grund dafür? EMF ist ein sehr zentraler Bestandteil, es kann zu Problemen führen die neue Version in eine alte Plattform zu installieren.
Gib beim editieren der Target Platform einfach eine Software Site an (die Galileo Update Site), wähle das EMF Feature aus und das war's.


----------



## schnurpsel (10. Feb 2010)

so langsam macht mich das wahnsinnig :cry:

Hatte nach meinem ersten Post ein fiese "Lösung" gefunden. Die benötigten plugins über "plug-in from existing jar archives" eingebunden und dann konnte ich die Funktionen erstellen (allerdings funktioniert das Databinding an sich auch da noch nicht) und über debug auch testen. Die Funktionalität vor der Umstellung von jaxb auf emf war somit fast wieder vorhanden. Ein Export dieses ganzen zugegebnermaßen komischen Konstrukts und Ausführung im Zielprogramm brachte dann noclassdeffounderrors etc.

Also rückgängig gemnacht und so eingebunden, wie du vorgeschlagen hast. Dann über required plugins die benötigten plugins hinzugefügt und das Projekt meckert nicht mehr wegen fehlenden plugins. Beim debuggen aber dann bereits die folgenden Meldungen


```
!ENTRY org.eclipse.equinox.simpleconfigurator 4 0 2010-02-10 15:50:20.409
!MESSAGE 
!STACK 0
org.osgi.framework.BundleException: Exception in org.eclipse.equinox.internal.simpleconfigurator.Activator.start() of bundle org.eclipse.equinox.simpleconfigurator.
[..]
Root exception:
java.lang.NoClassDefFoundError: org/eclipse/osgi/service/resolver/VersionRange

!ENTRY org.eclipse.osgi 4 0 2010-02-10 15:50:20.440
!MESSAGE Bundle [email]initial@reference:file:../../../1006_JAVA/project_3.5/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.equinox.simpleconfigurator_1.0.101.R35x_v20090807-1100.jar[/email]/ [2269] is not active.

!ENTRY org.eclipse.osgi 4 0 2010-02-10 15:50:20.440
!MESSAGE Application error
!STACK 1
java.lang.IllegalStateException: Unable to acquire application service. Ensure that the org.eclipse.core.runtime bundle is resolved and started (see config.ini).
```

Danke für dein Hilfe Wildcard, aber ich glotz da echt langsam rein wie eine Kuh in ein Uhrwerk. Man kann hier was einstellen und dort was hinzufügen, dann an Stelle X ein Häkchen setzen oder auch nicht. Aber welche die richtigen Stellen zum Umsetzen sind, weiß ich nicht. :bahnhof:


----------



## Wildcard (10. Feb 2010)

Was tust du denn da? 


> !ENTRY org.eclipse.osgi 4 0 2010-02-10 15:50:20.440
> !MESSAGE Bundle initial@reference:file:../../../1006_JAVA/project_3.5/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.equinox.simpleconfigurator_1.0.101.R35x_v20090807-1100.jar/ [2269] is not active.


Deine Target Platform soll doch 3.3 sein? Das ist allerdings ein 3.5 Bundle.
Definier deine Target Platform als eine 3.3 Eclipse Installation und füge dann *nur* die EMF Runtime von entweder der Galileo, oder der EMF Update Site hinzu.


----------



## schnurpsel (11. Feb 2010)

Ich weiß auch nicht ... eigentlich mache ich nur das was du vorgeschlagen hast. Hier mal Schritt für Schritt, was ich tue.

1. Eclipse 3.5. geöffnet mit meinem Workspace
2. TargetPlatform eingestellt über "An installation (such as an Eclipse SDK) in the local file system. The installed plug-ins will be added to the target definition." Hier ist das Zielprogramm angegeben, welches mit 3.3 erstellt wurde.
3. Es sind jetzt alle EMF-Dinge bis auf das Databinding an sich umgesetzt (einige EMF-Funktionen werden auch im Zielprogramm verwendet, weshalb die notwendigen Bundles vorhanden sind).
4. kleiner Zwischentest --> Plugin lässt sich debuggen
5. Databinding benötigt nun import org.eclipse.emf.databinding.EMFObservables. Hier kommt die Meldung "The import org.eclipse.emf.databinding.EMFObservables can not be resolved".
6. Also über Target Platform ein "Add" gemacht, die Software Site von Galileo angegeben und nur "EM - Eclipse Modeling Framework SDK" angegeben.
7. Reload des Ganzen, import von EMFObservables ist möglich.

Ergebnis: Starten des Plugins im Debug liefert mir die im zweiten Beitrag genannten Fehlermeldungen ???:L


----------



## Wildcard (11. Feb 2010)

Dann schau dir mal genau deine Launch Config an, denn da ist offensichtlich ein 3.5 Bundle enthalten
org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.equinox.simpleconfigurator_1.0.101.R35x_v20090807-1100.jar
Wenn deine Target Platform 3.3 ist dürfte es ja nicht enthalten sein.
Ist es möglich das das Produkt das du als TP eingebunden hast schon mit falschen Bundles gebaut wurde?


----------



## schnurpsel (18. Feb 2010)

Hallo,

so das funktioniert jetzt endlich. Durch das viele Rumprobieren hatten sich tatsächlich 3.5. Bundles eingeschlichen. Habe alles aufgeräumt und jetzt sind diese Probleme weg.

Vielen Dank für deine Hilfe und Geduld Wildcard :toll:

Grüße
schnurpsel


----------

