2012-04-27 7 views
6

Buduję aplikację RCP, która będzie składała się z kilku funkcji.Jak utworzyć aplikację Eclipse RCP, aby jej funkcje mogły być aktualizowane automatycznie?

Moja aplikacja RCP jest skonfigurowana tak, aby sprawdzać dostępność aktualizacji przy każdym uruchomieniu. Mój obecny problem polega na tym, że potrzebuję jednej z moich funkcji do "instalacji" w czasie kompilacji, aby była aktualizowana podczas automatycznego sprawdzania aktualizacji bez zmuszania użytkownika do ręcznej instalacji. Potrzebuję tej funkcji do aktualizacji niezależnie od innych funkcji w systemie.

Podsumowując, po prostu szukam ładnego, zautomatyzowanego sposobu, aby funkcja była instalowana w aplikacji RCP w taki sposób, aby była aktualizowana niezależnie od innych funkcji i nie wymagała użytkownika RCP aplikacja, aby zainstalować ją ręcznie.

Odpowiedz

2

Tymczasem Tycho ma wyraźne poparcie dla tego przypadku użycia. Począwszy od Tycho 0.20.0, możesz sprawić, że Tycho instaluje funkcje RCP niezależnie od produktu. W ten sposób funkcje te można aktualizować (a nawet odinstalowywać) niezależnie od produktu.

Aby zainstalować funkcje samodzielnie, po prostu dodaj atrybut installMode="root" do odpowiednich znaczników obiektów w pliku produktu. Przykład:

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

Aby uzyskać więcej informacji, zobacz this documentation page.

+0

Gdzie mogę znaleźć ten plik .produktu? – Wearybands

5

Po długich poszukiwaniach znalazłem odpowiedź. To trochę kundel, ale jestem gotów zrobić cokolwiek w tym momencie. Moje rozwiązanie zależy od tego, czy moja aplikacja RCP zawiera aplikację p2 org.eclipse.equinox.p2.director. Zgadnij, jeśli twoja aplikacja RCP nie zawiera tej aplikacji, możesz odwołać się do innej instalacji Eclipse, aby uruchomić Directora. Po prostu zrobiłem to w ten sposób, aby uniknąć sytuacji, w której Eclipse siedzi na mojej maszynie.

Użyłem listy mailingowej p2-dev, a Paul Webster odpowiedział na moje pytanie. (Dzięki Paul)

Zasugerował użycie mrówki do uruchomienia aplikacji p2 director, aby zainstalować IU w mojej zbudowanej aplikacji RCP.

Oto jego odpowiedź na liście mailingowej p2-dev http://dev.eclipse.org/mhonarc/lists/p2-dev/msg04735.html

Oto mrówka cel wymyśliłem.

<target name="install_IU"> 
    <path id="launcher.paths"> 
    <fileset 
     dir="${app.dir}" 
     includes="plugins/org.eclipse.equinox.launcher_*" /> 
    </path> 
    <property 
     name="launcherPath" 
     refid="launcher.paths" /> 
    <echo>-installIU ${iu.id} </echo> 
    <java 
     jar="${launcherPath}" 
     failonerror="false" 
     dir="${app.dir}" 
     timeout="900000" 
     fork="true" 
     output="${basedir}/director.log" 
     resultproperty="directorcode"> 
     <arg line="-application org.eclipse.equinox.p2.director" /> 
     <arg line="-noSplash" /> 
     <arg line="-installIUs ${iu.id}" /> 
     <arg line="-repository ${iu.repo}" /> 
     <arg line="-destination ${app.dir}" /> 
     <arg line="-bundlepool ${app.dir}" /> 
    </java> 

    <zip destfile="${app.zip}" 
    basedir="${app.dir}"/> 
</target> 

Umieszczam to w pliku ant w tym samym projekcie, który tworzy moją aplikację Eclipse RCP przez Tycho. Tycho produkuje moje kompilacji artefakty w katalogu o nazwie „target”, więc moich parametrów do mrówki cel powyżej wyglądać tak ...

<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> 

Mam jeszcze kilka takich celów dla każdej platformy, że moja aplikacja jest zbudowany RCP dla.

Mam nadzieję, że to pomoże.

AKTUALIZACJA: 8 maja 2014 r. Tobias zwrócił mi uwagę, że powinienem zmienić zaakceptowaną odpowiedź z tej na nową, która została dodana do Tycho 0.20.0, co umożliwia takie zachowanie w znacznie prostsza moda. Tak więc nowa zaakceptowana odpowiedź jest teraz właściwym rozwiązaniem dla tego pytania.

+1

FYI, dlatego to działa: Pierwszy Tycho wewnętrznie wywołuje (osadzonego) dyrektora p2 i instaluje produkt IU. Następnie ponownie zadzwonisz do reżysera i zainstalujesz funkcję IU. Wynikowa instalacja ma następnie dwie "podstawowe jednostki organizacyjne" (tj. Punkty wejściowe obejmują instalację). Sprawdzenie aktualizacji sprawdzi każdą z głównych jednostek IU dla nowszych wersji - dzięki temu twoja funkcja zostanie zaktualizowana, gdy dostępna będzie nowsza wersja w skonfigurowanych repozytoriach. – oberlies

+0

Mam dobre wieści: Tycho ma teraz [wyraźne poparcie dla tego przypadku użycia] (http://wiki.eclipse.org/Tycho/Release_Notes/0.20), więc prawdopodobnie możesz pozbyć się około mili pom. konfiguracja xml ;-) – oberlies

+0

Dzięki, usunąłem stary kod mrówki z góry i skorzystałem z nowej funkcji. Byłem jednym z 18 wyborców na temat błędu :) https://bugs.eclipse.org/bugs/show_bug.cgi?id=361722 – twindham

1

zanim znalazłem odpowiedź, że jest tu udokumentowane i zaakceptowane, próbowałem i nie udało się rozwiązać ten problem w następujący sposób:

Próbowałem oddanie funkcję w definicji produktu. Ta funkcja jest instalowana z powodzeniem, ale odbiera moją zdolność do aktualizacji niezależnie od innych funkcji aplikacji RCP.

Mam polecenie dotyku p2, które aktualnie działa. Dodaje repozytorium do dostępnych witryn aktualizacji w aplikacji RCP, używając pliku p2.inf. Wygląda to tak ...

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);\\ 

Próbowałem dodać linię tak, aby zainstalować ten dodatek, ale mój tycho build nie gdy uruchomię mvn czystej instalacji

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

Oto niektóre komunikatu o błędzie z 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. 

Moja intuicja mówi mi, że to jest komunikat o błędzie mówiąc, że mój plugin aplikacja RCP brakuje czegoś, co powie p2 gdzie znaleźć funkcję, która ja wa nt do instalacji w czasie kompilacji. Myślę???

+0

Dobry wysiłek! Mimo to punkt kontaktowy 'installFeature' nie może tutaj działać. Punkty dotykowe są fizyczną (tj. We/wy) warstwą p2. Aby osiągnąć cel, potrzebujesz zmiany metadanych wysokiego poziomu p2 instalacji. – oberlies

+0

Cóż, zgadzam się, że powyższe przykłady nie działają. Zostawiam ich tutaj, aby inni borykający się z tym samym problemem mogli go znaleźć podczas wyszukiwania w Internecie. Naprawdę chciałbym dowiedzieć się więcej o tym, co robi p2 tutaj. Od IMHO trudno jest zrozumieć, jak pracować z p2, nie jest to zbyt intuicyjne. Chcę dowiedzieć się więcej ... więc, co masz na myśli przez "Potrzebujesz zmiany w metadanych p2 wysokiego poziomu instalacji"? OBTW, odpowiedź, którą dał mi Paul Webster, pracuje dla mnie, dlatego ostatnio nie szukałem innych możliwych rozwiązań. – twindham

+0

Dodano dodatkowe wyjaśnienie w komentarzu do [rozwiązania roboczego] (http://stackoverflow.com/a/10608982/1523648). – oberlies

Powiązane problemy