Ich habe das Projekt org.eclipse.equinox.p2.examples.rcp.prestartupdate genommen und es für meine RCP-Anwendung angepasst. Ich habe dann ein Update-Repository eingerichtet, das als Teil meines nächtlichen Builds aktualisiert wird.
Wenn ich meine Anwendung öffne, geht sie durch die Bewegungen, als würde sie aktualisieren - sie findet die Update-Site, generiert einen Deinstallations- und Installationsoperanden für jedes Bundle korrekt und sagt, dass sie ohne Fehler beendet wurde. Das Problem ist, dass die Plugins nie wirklich in den Plugins-Ordner installiert werden, obwohl das Profil aktualisiert wird (ein späterer Lauf zeigt an, dass es keine Updates gibt). Bei der nächsten Ausführung des Builds wird korrekt festgestellt, dass es Aktualisierungen gibt, aber das Gleiche passiert erneut.
Ich habe Tage mit der Fehlersuche verbracht, und das Einzige, was ungewöhnlich aussieht (nicht, dass ich ganz verstehe, was los ist), ist, dass während der abschließenden configure-Phase keines der TouchpointData-Objekte irgendwelche Anweisungen hat, so dass es nicht so aussieht, als würde configure tun, was es tun sollte.
Ich habe wirklich keine Ahnung, wo ich als Nächstes suchen soll, und würde gerne sehen, ob jemand andere Ideen hat.
Aktualisierung:
Endlich habe ich herausgefunden, was los ist.
Das Problem begann, als ich mein Produkt ohne die Generierung des Metadaten-Repositorys erstellte. Bei der Erstellung über Eclipse habe ich die Option "Metadaten-Repository generieren" in den Assistenten für den Produktexport nicht aktiviert, da ich kein p2-Repository benötigte, sondern nur das Produkt. Das Problem ist, dass das Produkt ohne die Aktivierung dieser Schaltfläche nicht als P2 aktiviert installiert wird, was unter anderem dazu führt, dass kein Profil erzeugt wird.
Ich habe versucht, dies zu kompensieren, indem ich manuell ein Profil im Code erstellt habe, was, wie ich inzwischen herausgefunden habe, eine wirklich schlechte Idee ist. Meine ursprünglichen Probleme sind entstanden, weil mein Profil nicht richtig eingerichtet war.
Sobald ich das Produkt mit der Option "Metadaten-Repository generieren" exportiert hatte, begann das Update mit der korrekten Installation der neuen Plugins.
Das Problem, das ich jetzt habe, ist, dass, obwohl die Plugins korrekt installiert werden, die ausführbare Datei gelöscht wird und ich meine Anwendung nicht mehr starten kann. Ich erstelle meine Update-Site über Hudson, und der Binärordner, der vorhanden ist, wenn ich den Eclipse-Assistenten für den Produktexport verwende, fehlt. Ich gehe davon aus, dass dies der Grund für das Problem ist.
Irgendwelche Ideen, warum die Binärdateien nicht in meinem Headless PDE-Build erstellt werden?
Das habe ich auch herausgefunden. Ich hatte angenommen, dass alles, was ich brauchte, war die einzelnen Launcher-Plugins für die Plattformen, die ich bauen wollte. Da ich versuchte, den Prozess zu verstehen, kopierte ich die Plugins eins nach dem anderen auf den Build-Server. Es stellte sich heraus, dass man das org.eclipse.equinox.executable-Feature aus dem Delta-Pack benötigt, um die plattformspezifischen Binärdateien in den Build zu integrieren. Sobald ich das zum Build hinzugefügt hatte, tauchten die Binärdateien in der Ausgabe auf. Mit den Binärdateien funktioniert der Update-Mechanismus genau wie vorgesehen.