Tycho i Eclipse: Jak rozwiązać zależności OSGI do moich własnych pakietów w czasie programowania w Eclipse, bez otwierania ich wszystkich w IDE

tło

Moja aplikacja Eclipse RCP jest tworzona przy użyciu Tycho. Składa się z wielu komponentów (w postaci pakietów OSGi / wtyczek Eclipse). Jeden z tych komponentów zawiera plik produktu i materializuje produkt.

W głównym katalogu aplikacji znajduje się reaktor POM, który buduje wszystkie komponenty w porządku, ale chcę też samodzielnie budować inne komponenty (używającmvn deploy).

Budowanie jednego komponentu działa w następujący sposób:

Pobierz najnowsze wersje wszystkich zależności komponentu z naszego repozytorium firmy (p2).Zbuduj komponent.Wdróż komponent do repozytorium naszej firmy, aby mógł zostać wykorzystany jako zależność dla innych komponentów.

Uwaga: nasze repozytorium jest normalnemaven2 repozytorium hostowane na Nexusie, którego artefakty RCP są automatycznie mapowane do formatu repozytorium p2. W ten sposób Tycho może użyć formatu repozytorium p2 do znalezienia zależności, podczas gdy standardowe wdrożenie Maven może być użyte. To działa dobrze.

Uwaga: Mój rodzic POM upewnia się, że szukamy zależności w adresie URL repozytorium p2. Adres URL wdrożenia jest domyślną lokalizacją repozytorium w formacie Maven2. To działa dobrze.

Problem

Podczas budowania takiego pojedynczego komponentu za pomocą wiersza polecenia (mvn deploy), Maven szukawewnątrz projektu zależności w repozytorium p2 i są poprawnie rozwiązane (tj. najnowsza wersja jest automatycznie pobierana i używana w kompilacji).

Jednak podczas tworzenia w Eclipse IDE nie może ich rozwiązać. Pliki manifestu powodują błąd w każdej z moich zależności wewnątrz projektu, których nie można rozwiązać.

Pytanie

Moje pytanie brzmi: jak mogę sprawić, by środowisko Eclipse szukało zależności (i nowych wersji zależności) w:

Moje lokalne repozytorium p2 (~/.m2/repository/p2/osgi/bundles)Repozytorium p2 mojej firmy (nexus.mycompany.com/myproduct-snapshots/.meta/p2)

Najlepiej byłoby, gdyby szukał ich za każdym razem i pobierał najnowszą wersję, jeśli dostępna jest nowsza wersja.

Jeśli nie używa adresów URL repozytorium p2 w POM, jak mam skonfigurować Eclipse?

Przykład

Rozważmy wtyczkę eclipsecom.mycompany.myproduct.fancy, która zależy od innej wtyczki eclipsecom.mycompany.myproduct.core.

Oba mają także POM (skonfigurowany do użycia w Tycho), który (poprzez ich nadrzędny POM) ma poprawnie skonfigurowane repozytoria Nexusa: URL repozytorium maven2 do wdrożenia i URL repozytorium p2 do wyszukiwania zależności.

Najpierw wdrażamcore wtyczka do mojego repozytorium maven (używając domyślnegomvn deploy). Repozytorium Nexus zapewni tę wdrożoną wtyczkę zarówno w formacie maven, jak i p2.

Kiedy budujęfancy komponent za pomocą wiersza poleceń (za pomocąmvn install), (wcześniej wdrożony) podstawowy komponent zostanie znaleziony i pobrany automatycznie.

project/com.mycompany.myproduct.fancy$ mvn clean install
<searches in p2 repository, download core>
<builds fancy>
<SUCCESS>

Po otwarciu nowego obszaru roboczego Eclipse i otwarciufancy komponent, jego Manifest (zawierający jego zależności) daje następujący błąd:

Bundle 'com.mycompany.myproduct.core' cannot be resolved.

Moje pytanie brzmi: jak mogę rozwinąćfancy komponent w środowisku Eclipse IDE bez potrzeby otwieraniacore jako projekt w Eclipse.

Spekulacja

To spekulacja z mojej strony. Proszę, popraw mnie, jeśli się mylę, a każde inne rozwiązanie rzeczywistego problemu jest również mile widziane!

Wiem, żem2e wtyczka środowiska Eclipse IDE obecnie mapuje POM Maven na koncepcje Eclipse (za pomocą złączy m2e). Zainstalowałem dedykowane złącza Tycho. Na przykład krok kompilacji mvn jest faktycznie wykonywany przez kompilator Eclipse JDT.

Wiem też, że kiedy kompletny produkt Tycho jest uruchamiany w Eclipse, jest uruchamiany w środowisku Eclipse PDE. Na przykład muszę określić platformę docelową w mojej konfiguracji Run.

Wiem, że mogę otworzyć wszystkie składniki w moim obszarze roboczym Eclipse. Rozwiązałoby to problem, ale nie jest wykonalne, ponieważ mam wiele komponentów, co zepsułoby niezależny rozwój komponentów.

Zakładam, że mapowanie Eclipse m2e i / lub środowisko budowania PDE nie jest wystarczająco inteligentne, aby automatycznie pobierać (najnowsze) zależności w czasie kompilacji. Proszę popraw mnie jeżeli się mylę. :)

Dlatego zakładam, że muszę także określić platformę docelową w czasie kompilacji. Przyjrzałem sięOkno> Preferencje> Tworzenie wtyczek> Platforma docelowa. Mogę dodać nasze repozytorium p2 do platformy docelowej, która rozwiązuje problem. Daje to jednak wiele problemów:

Potrzebuję funkcji zawierającej wszystkie komponenty, aby to działało. Można dodawać tylko funkcje.Za każdym razem, gdy wdrażam nową kompilację pojedynczego komponentu, musiałbym odbudować kompletną funkcję (aby utworzyć nową wersję funkcji w naszym repozytorium p2).Za każdym razem, gdy aktualizuję komponent i buduję funkcję, musiałbym ręcznie zmienić platformę docelową.

Jeśli powyższe wszystko jest poprawne, spekuluję, że potrzebuję złącza m2e (lub innego od bieżącego), które faktycznie sprawdza repozytoria p2 określone w POM podczas rozwiązywania zależności OSGi i automatycznie dodaje te do platformy docelowej.

questionAnswers(2)

yourAnswerToTheQuestion