2012-09-10 10 views
5

Rozważmy następujący scenariusz: Moja aplikacja ma pewne zależności od moich własnych artefaktów POM (zbudowanych z czystego Mavena) i pewnych zależności od moich własnych manifest-pierwszych artefaktów (zbudowanych z Tycho). W przypadku artefaktów POM, Tycho rozwiązuje dokładnie wersję, którą określiłem w POM. W przypadku manifestu-pierwszych artefaktów, Tycho rozwiązuje lokalnie zbudowane jednostki, które mogą mieć wyższą wersję.Tycho rozwiązuje niewłaściwą wersję moich własnych manifestów - pierwsze artefakty

W moim konkretnym przypadku, określiłem zależność w pom.xml do manifestu pierwszego artefaktu w wersji 1.2.0, ale otrzymałem ostrzeżenie "Następujące lokalnie zbudowane jednostki zostały użyte do rozwiązania zależności projektu" z wersją 1.3.0.2012xxx.

Znalazłem już następujące błędy i dyskusje, ale nie rozumiem, dlaczego istnieje rozbieżność w rozwiązywaniu Tycho POM-first i oczywistych zależności.

+1

Dzięki za szybką odpowiedź i na krótkie wprowadzenie do StackOverflow ;-) jak rozpoznawane i wysłana na pytanie o dyskusyjnej też, ale jako że nie pokazał po trzech dniach postanowiłem opublikować go tutaj. – howlibird

Odpowiedz

6

zależnościach rozmiar jest to proces dwustopniowy, w Tycho:

  • pierwsze Tycho oblicza tzw target platform, która jest z zestaw artefaktów, które są uwzględniane w rozwiązywaniu zależności. W tym kroku Tycho ocenia zależność POM zgodnie z regułami Maven i dodaje wynik do platformy docelowej. Ponadto, wszystkie artefakty Tycho z , które zbudowałeś lokalnie z mvn install, są dodawane do platformy docelowej .

  • Następnie Tycho rozwiązuje zależności projektu (od MANIFEST.MF, feature.xml, itp.) Zgodnie z regułami OSGi. W przeciwieństwie do w zależnościach Maven, zależności OSGi są zwykle określane jako zakresy wersji . Jeśli więc napiszesz:

    Require-Bundle: my.bundle;bundle-version="1.2.0" 
    

    mówisz, że chcesz wersję 1.2.0 lub nowszą. Zazwyczaj nie chcesz tutaj podawać dokładnej wersji, ponieważ miałoby to wpływ na środowisko wykonawcze. Ale chcesz kontrolować, co dzieje się w czasie kompilacji, dlatego istnieją różne sposoby kontrolowania zawartości docelowej platformy.

W danym przypadku, masz artefakty POM-POM na platformie docelowej w wersji określonej w POM. Następnie wydajesz się również określać zależność POM od twoich artefaktów Tycho (co jest rzadkie, ale w porządku), więc będziesz mieć artefakty Tycho w określonej wersji na platformie docelowej. Ale ponieważ masz również wbudowaną nowszą wersję z artefaktów Tycho lokalnie z mvn install, będą one również na platformie docelowej. Rozdzielczość zależności (krok 2) ma zatem wybór między dwiema wersjami, zazwyczaj wybierze późniejszą wersję.

Aby zapobiec dodawaniu artefaktów budowanych lokalnie do platformy docelowej, można usunąć plik ~/.m2/repository/.meta/p2-local-metadata.properties. (Zakładam, że już to wiesz, ale dla pewności. Bug 355367 przyniesie również alternatywną, wygodniejszą opcję w wersji 0.16.0.)

I teraz w końcu dostać się do pytania, dlaczego zachowanie jest różna dla POM-pierwszy artefaktów porównaniu do artefaktów Tycho:

  • Załóżmy wiele artefaktów Tycho zbudowane są ze sobą w tym samym reaktorze. Następnie każdy artefakt może wykorzystywać inne artefakty jako zależności bez potrzeby konfigurowania konkretnej platformy docelowej, np. nie potrzebujesz zależności POM od artefaktów w tym samym reaktorze. (Innymi słowy: artefakty pochodzące z tego samego reaktora są automatycznie częścią docelowej platformy modułu). Tak więc, aby wesprzeć odbudowę części reaktora Tycho (po mvn install pełnego reaktora), lokalnie zainstalowane artefakty Tycho należy dodać do platformy docelowej każdego modułu. Tycho nie może wiedzieć, czy pierwotnie były częścią tego samego reaktora, więc po prostu dodaje je wszystkie.

  • Dla artefaktów POM, odniesienie do artefaktu jest zawsze obecne (poprzez dziedziczenie konfiguracji Mavena), nawet jeśli zbudowana jest tylko część reaktora Tycho. W związku z tym nie ma potrzeby stosowania żadnego mechanizmu do przechwytywania dowolnej wersji lokalnie budowanych artefaktów POM, ale Tycho może dodać dokładnie określoną wersję do docelowej platformy.

0

Dla zainteresowanych zmusić Tycho ignorować lokalnych artefaktów podczas rozwiązywania platformę docelową, dodać tycho.localArtifacts CLI = ignorują jak na przykład

mvn clean install -Dtycho.localArtifacts=ignore 

Więcej szczegółów można znaleźć na Tycho-Target Eclipse Wiki

Powiązane problemy