RCP Eclipse Provisioning

dzim

Top Contributor
Hallo zusammen,

da bin ich mal wieder.
Features und Nervige Toolbar-/Menubar-Items sind passé. Jetzt wage ich mich an die Eingeweide von p2.

Es gibt da ja die p2.inf, in der man "IUs" schon vorneweg beschreiben kann (Entschuldigt die Anführungstriche, aber die Doku zu p2 ist ja IMHO bestenfalls ein schlechter Witz).
Ich möchte eigentlich gar nicht so viel machen, lediglich initiale Update-Seiten festlegen.

Aus einem uraltem Test habe ich die folgenden Zeilen übernommen:
Code:
instructions.configure=\
  addRepository(type:0,location:http${#58}//download.eclipse.org/releases/galileo);\
  addRepository(type:1,location:http${#58}//download.eclipse.org/releases/galileo);\
  addRepository(type:0,location:http${#58}//download.eclipse.org/eclipse/updates/3.5);\
  addRepository(type:1,location:http${#58}//download.eclipse.org/eclipse/updates/3.5);
Ich weiß nicht mehr, wo ich das gefunden habe, aber mit einem Featurebasiserten Export klappt es und die beiden Seiten sind zu sehen.
Ich hätte gerne in einem ersten Schritt eine lokale Update-Seite hinzugefügt:
Code:
instructions.configure=\
  addRepository(type:0,location:http${#58}//download.eclipse.org/releases/galileo);\
  addRepository(type:1,location:http${#58}//download.eclipse.org/releases/galileo);\
  addRepository(type:0,location:http${#58}//download.eclipse.org/eclipse/updates/3.5);\
  addRepository(type:1,location:http${#58}//download.eclipse.org/eclipse/updates/3.5);\
  addRepository(type:0,location:file${#58}///home/dzimmermann/workspace/My${#20}Update${#20}Site/);\
  addRepository(type:1,location:file${#58}///home/dzimmermann/workspace/My${#20}Update${#20}Site/);

Ich dachte mir: ${#58} wird wohl eine etwas seltsame Maskierung eines Doppelpunktes sein (ASCII-Nr. 58) und habe aus der in URLs erwarteten Maskierung von %20 für ein Leerzeichen ${#20} eingefügt.
Da ich lokal arbeite, habe ich file, statt http verwendet.

Das Problem ist, ich bekomme folgende Fehlernachricht:
Code:
 An error occurred while configuring the installed items
 session context was:(profile=profile, phase=org.eclipse.equinox.internal.p2.engine.phases.Configure, operand=null --> [R]myapp.rcp.pfs.ssdtool.product 0.5.2.201103311646, action=org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions.AddRepositoryAction).
 The "location" parameter was not set in the "addRepository" action.

Davon einmal abgesehen, hat die "Dokumentation" für dieses Thema zwar viel Kram - ich kann es nicht anders nennen - zu vermelden, aber von addRepository steht nirgens was. Obwohl es ja für das Beispiel ganz oben funktioniert...

Ich finde zwar, das die Google-Suche schon weitaus mehr bringt als die Doku von p2 (zum Beispiel Kai's Blog), aber wirklich eine Lösung zu meinem Problem finde ich spontan nicht.

Habt ihr da eine Idee?

Danke wie immer im Voraus!
Daniel
 
Irgendwie alles seltsam:

Ich habe
Code:
  addRepository(type:0,location:file${#58}///home/dzimmermann/workspace/My${#20}Update${#20}Site/);\
  addRepository(type:1,location:file${#58}///home/dzimmermann/workspace/My${#20}Update${#20}Site/);
refactored nach
Code:
  addRepository(type:0,location:file${#58}///home/dzimmermann/workspace/MyUpdateSite/);\
  addRepository(type:1,location:file${#58}///home/dzimmermann/workspace/MyUpdateSite/);
- also die Ominösen Leerzeichen entfernt - und jetzt geht es. Ich kann meine lokale Update-Site verwenden.
Ich bekomme zwar bei vielen meiner Features die Nachricht, dass sie wegen nicht gelöster Dependencies nicht installiert werden können (was ich, am Rande erwähnt, nicht wirklich verstehen kann), aber grundsätzlich funktioniert es erst einmal.

Edit:
Ich habe gerade einmal das Produkt mit den Features gebaut, die p2 nicht über die Update-Seite beziehen kann. Da geht alles - das versteh' jetzt mal einer...

Edit2:
Ich korrigiere meine Aussage von eben teilweise: Eines der Features, das nicht installiert werden konnte, enthält Fragmente mit Übersetzungen - dabei waren viel mehr Fragmente zu Plugins enthalten, die überhaupt nicht in der Anwendung sind. Konkret geht es um Fragmente aus dem Babel-Projekt - ich habe da nicht so gründlich aufgeräumt, wie ich es hätte machen müssen.
 
Zuletzt bearbeitet:
Hat jemand von euch den generell schon Erfahrung mit dem Konstruieren von Update-Sites?

Ich trete gerade mächtig auf der Stelle.
Ich bin jetzt zwar die nicht notwendigen Abhängigkeiten aus den Babel-Fragmenten los, aber wenn ich jetzt meine Update-Site aus der Applikation heraus anspreche, bekomme ich noch mehr Fehler.
Davon abgesehen, das der Baum (die Kategorien) bei den Standardmäßig aktivierten Optionen nicht mehr angezeigt wird (also: ja, ich habe die Site komplett neu gebaut; und ja: Ich habe die Features in Kategorien eingeteilt), bekomme ich jetzt fast immer die Nachricht, dass nur eine der Versionen eines Plugin installiert werden können.

Ein Beispiel:
Code:
Cannot complete the install because of a conflicting dependency.
  Software being installed: MyApps Complete 1.0.0.201104010936 (myapp.pfs.pcp.complete.feature.group 1.0.0.201104010936)
  Software currently installed: Platform 0.5.2.201104010922 (myapp.rcp.pfs.ssdtool.product 0.5.2.201104010922)
  Only one of the following can be installed at once: 
    ServiceClients 0.8.4.201104010922 (myapp.pfs.pcp.serviceclients 0.8.4.201104010922)
    ServiceClients 0.8.4.201104010936 (myapp.pfs.pcp.serviceclients 0.8.4.201104010936)
  Cannot satisfy dependency:
    From: Platform 0.5.2.201104010922 (myapp.rcp.pfs.ssdtool.product 0.5.2.201104010922)
    To: myapp.pfs.pcp.core.feature.group [0.5.2.201104010922]
  Cannot satisfy dependency:
    From: MyApps Complete 1.0.0.201104010936 (myapp.pfs.pcp.complete.feature.group 1.0.0.201104010936)
    To: myapp.pfs.pcp.serviceclients [0.8.4.201104010936]
  Cannot satisfy dependency:
    From: Platform Core 0.5.2.201104010922 (myapp.pfs.pcp.core.feature.group 0.5.2.201104010922)
    To: myapp.pfs.pcp.serviceclients [0.8.4.201104010922]

Also jetzt bitte kein Bashing, ich kann ja lesen - nur die Frage ist: Wieso tritt das auf?

Ich habe erst die Applikation (die sog. "Platform") bestehend aus zwei Features gebaut:
  1. Eclipse Core (also Features org.eclipse.rcp, p2, help und noch alle Plugins, die ich so brauchen kann)
  2. Platform Core (meine Plattform mit ihren Extension Points, Utilities - z.B. die "ServiceClients" - u.ä.)
Danach habe ich alles in meinem UpdateSite-Projekt bis auf die site.xml, die index.html und den web-Ordner gelöscht, im Editor für die site.xml "Synchronize" gedrückt und danach ein "Build All" ausgeführt.
Die App gestarten, "Help" > "Install New Software..." und dann hatte ich den Salat.
Ach so: "MyApps Complete" ist ein kleines Feature, in dass ich einfach alle Plugins für meine Platform gebundelt habe.

Muss ich in den Features vielleicht explizit die Versionen der Dependecies angeben?
Ich hatte zum Beispiel bei der Übersetzung meines "Platform Core" Features nur eben dieses als Abhängigkeit angegeben. Für mein "MyApps Complete" Feature lediglich das "Platform Core" Feature. Ist das Falsch gedacht? Muss ich auch die Anhängigkeit zum "Eclipse Core" Feature mit angeben?
Wenn ich dort "Compute" verwende, holt er nur Plugins, aber keine Features rein - manchmal auch mehrfach, mit verschiedenen Versionen. Wäre es sinnvoll überall die Abhängigkeiten mit "Compute" aufzulösen?
 
Ein Update Site Projekt ist doch AFAIK die alte legacy Update Site, oder?
Ich baue Update Sites normal entweder per Buckminster aus einem Feature, oder per b3 Aggregator wenn andere Seiten gespiegelt werden sollen.
Alternativ kannst du auch Maven Tycho oder PDE benutzen, wobei PDE IMO zu umständlich ist.
 

Neue Themen


Zurück
Oben