2012-04-27 6 views
6

Ich baue eine RCP-Anwendung, die aus mehreren Features bestehen wird.Wie erstelle ich eine Eclipse RCP-App, damit ihre Funktionen automatisch aktualisiert werden können?

Meine RCP-Anwendung ist so konfiguriert, dass sie bei jedem Start nach Aktualisierungen sucht. Mein aktuelles Problem ist, dass eines meiner Features zur Build-Zeit "installiert" werden muss, damit es während dieser automatischen Überprüfung auf Updates aktualisiert wird, ohne dass der Benutzer gezwungen ist, es manuell zu installieren. Ich brauche diese Funktion, um unabhängig von den anderen Funktionen im System zu aktualisieren.

Also, um es zusammenzufassen, ich bin nur auf der Suche nach einer netten automatisierten Möglichkeit, ein Feature in einer RCP-App so installiert zu haben, dass es unabhängig von anderen Features aktualisiert wird und den Benutzer des RCP nicht benötigt App, um es manuell zu installieren.

Antwort

2

In der Zwischenzeit hat Tycho explizite Unterstützung für diesen Anwendungsfall. Beginnend mit Tycho 0.20.0 können Sie Tycho Funktionen eines RCP separat vom Produkt installieren lassen. Auf diese Weise können diese Funktionen unabhängig vom Produkt aktualisiert (oder sogar deinstalliert) werden.

Um Funktionen unabhängig voneinander zu installieren, fügen Sie einfach ein Attribut installMode="root" zu den entsprechenden Feature-Tags in der Produktdatei hinzu. Beispiel:

<features> 
    <feature id="org.eclipse.platform"/> 
    <feature id="updatable.feature" installMode="root"/> 
</features> 

Weitere Informationen finden Sie unter this documentation page.

+0

Wo finde ich diese .product-Datei? – Wearybands

5

Nach einer langen Suche habe ich die Antwort gefunden. Es ist eine Art Klotz, aber ich bin bereit, an dieser Stelle alles zu tun. Meine Lösung hängt von der Tatsache ab, dass meine gebaute RCP-Anwendung p2-Anwendung org.eclipse.equinox.p2.director enthält. Ich denke, wenn Ihre RCP-App diese Anwendung nicht enthält, können Sie auf eine andere Eclipse-Installation verweisen, um den Director zu starten. Ich habe es einfach so gemacht, um zu vermeiden, dass eine Instanz von Eclipse auf meiner Build-Maschine sitzt.

Ich habe die Mailingliste p2-dev benutzt, und Paul Webster hat meine Frage beantwortet. (Danke Paul)

Er schlug vor, ameise zu verwenden, um die p2-Direktoranwendung zu starten, um die IE in meine gebaute RCP-Anwendung zu installieren.

Hier ist seine Antwort auf die p2-dev Mailingliste http://dev.eclipse.org/mhonarc/lists/p2-dev/msg04735.html

Hier ist die Ameise Ziel kam ich mit.

Ich legte dies in eine Ant-Datei im selben Projekt, die meine Eclipse RCP-Anwendung über Tycho produziert. Tycho produziert meine Build-Artefakte in einem Verzeichnis namens „Ziel“ so meine Parameter an die Ameise Ziel oben sieht wie folgt aus ...

<target name="modify_x86"> 
    <antcall target="install_IU"> 
    <param name="iu.id" value="com.mydomain.the.feature.i.want.to.install.feature.feature.group"/> 
    <param name="iu.repo" value="http://mydomain.com/thep2repository/where/i/deploy/the/feature/to/install"/> 
    <param name="app.dir" value="${basedir}/target/products/com.mydomain.myRCPapplication/win32/win32/x86"/> 
    <param name="app.zip" value="${basedir}/target/products/com.mydomain.myRCPapplication-win32.win32.x86.zip"/> 
    </antcall> 
</target> 

Ich habe ein paar mehr dieser Ziele für jede Plattform, die meine RCP Anwendung erstellt wird zum.

Hoffe, das hilft.

UPDATE: 8. Mai 2014. Tobias hat mich darauf aufmerksam gemacht, dass ich die akzeptierte Antwort von dieser auf die mit Tycho 0.20.0 neu hinzugefügte Funktion ändern sollte, die dieses Verhalten in einem viel einfachere Mode. Also, die neue akzeptierte Antwort ist jetzt die richtige Lösung für diese Frage.

+1

FYI, deshalb funktioniert das: Zuerst ruft Tycho intern einen (eingebetteten) p2-Director auf und installiert das Produkt-IE. Dann rufen Sie den Director erneut an und installieren die Feature-IU. Die resultierende Installation hat dann zwei "Root-IUs" (d. H. Einstiegspunkte, die die Installation umfassen). Bei einer Überprüfung auf Updates werden die einzelnen Root-IUs auf neuere Versionen überprüft, damit Ihre Funktion aktualisiert wird, wenn in den konfigurierten Repositorys eine neuere Version verfügbar ist. – oberlies

+0

Ich habe gute Nachrichten: Tycho hat jetzt [explizite Unterstützung für diesen Anwendungsfall] (http://wiki.eclipse.org/Tycho/Release_Notes/0.20), so dass Sie wahrscheinlich etwa eine Meile Pom loswerden können. xml configuration ;-) – oberlies

+0

Danke, ich hatte den alten Ameisencode von oben entfernt und die neue Funktion ausgenutzt. Ich war einer der 18 Wähler auf dem Bug :) https://bugs.eclipse.org/bugs/show_bug.cgi?id=361722 – twindham

1

Bevor ich die Antwort gefunden, die hier dokumentiert und akzeptiert wird, habe ich versucht und sind gescheitert, dieses Problem in den folgenden Arten zu lösen:

Ich habe versucht, die Eigenschaft in der Produktdefinition setzen. Dadurch wird die Funktion erfolgreich installiert, aber es nimmt mir die Möglichkeit, sie unabhängig von anderen Funktionen in der RCP-Anwendung zu aktualisieren.

Ich habe einen P2-Touchpoint-Befehl, der gerade funktioniert. Es fügt den verfügbaren Update-Sites in der RCP-Anwendung ein Repository mithilfe einer p2.inf-Datei hinzu. Es sieht wie folgt aus ...

instructions.configure=\ 
org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(location:http${#58}//myUpdateSsite/myFeature,type:0,name:My Feature Name,enabled:true);\ 
org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(location:http${#58}//myUpdateSsite/myFeature,type:1,name:My Feature Name,enabled:true);\\ 

Ich habe versucht, eine Zeile wie diese hinzufügen, dass Feature installiert zu bekommen, aber mein tycho Build schlägt fehl, wenn ich mvn saubere Installation laufen

instructions.configure=\ 
org.eclipse.equinox.p2.touchpoint.eclipse.installFeature(feature:My Feature Name,featureId:com.my.domain.my.feature.id,version:1.0.0); 

Hier einige ist die Fehlermeldung von maven/tycho

An error occurred while configuring the installed items session context was: 
(profile=DefaultProfile, phase=org.eclipse.equinox.internal.p2.engine.phases.Configure, operand=null --> 
[R]{my.domain.my.rcp.product.plugin 1.1.6.20120427-1346}, 
action=org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions.InstallFeatureAction). 
Installable unit contains no artifacts: [R]my.domain.my.rcp.product.plugin 1.1.6.20120427-1346. 

mir Meine Intuition, dass diese Fehlermeldung sagt sagt, dass meine RCP-Anwendung Plugin etwas fehlt, dass p2, wo zu finden, die Funktion, die sagen, ich wa nicht zur Build-Zeit installieren. Ich denke???

+0

Guter Aufwand! Trotzdem kann der 'installFeature'-Touchpoint hier nicht funktionieren. Berührungspunkte sind die physische Schicht (d. H. Datei-E/A) von p2. Sie benötigen eine Änderung in den High-Level-P2-Metadaten der Installation, um Ihr Ziel zu erreichen. – oberlies

+0

Nun, ich stimme zu, dass die obigen Beispiele nicht funktionieren. Ich lasse sie hier, damit andere, die mit der gleichen Sache kämpfen, sie während einer Websuche finden können. Ich würde gerne mehr darüber erfahren, was p2 hier macht. Es war schwierig, mit IM2 zu arbeiten, da es nicht sehr intuitiv ist. Ich möchte mehr erfahren ... also, was meinst du mit "Du brauchst eine Änderung in den High-Level-P2-Metadaten der Installation"? OBTW, die Antwort, die Paul Webster mir gegeben hat, arbeitet für mich, deshalb habe ich in letzter Zeit keine anderen möglichen Lösungen verfolgt. – twindham

+0

Weitere Erläuterungen in einem Kommentar zur [Arbeitslösung] (http://stackoverflow.com/a/10608982/1523648) hinzugefügt. – oberlies

Verwandte Themen