2015-04-06 25 views
22

Ostatnio pracowałem nad pewnymi ulepszeniami w projekcie opracowanym jakiś czas temu i to właśnie znalazłem. Wiele zależności w plikach pom przechodzi bez określonych wersji, a mimo to są one rozwiązywane. Projekt składa się z 1 modułu głównego i 2 submodułów. Używany jest wzorzec agregatora, co oznacza, że ​​w ogóle nie ma sekcji zależności. Górny projekt po prostu agreguje 2 moduły i to wszystko, co robi. Podprojekty nie odnoszą się do niego jako do rodzica. Mają innego rodzica. Nie mogę pojąć, że ani same podprojekty, ani ich rodzice (tak naprawdę nie ma również Zarządzania zależnością) określają wersje dla niektórych zależności. Na przykład:Zależność maven bez wersji

<dependency> 
    <groupId>javax.mail</groupId> 
    <artifactId>javax.mail-api</artifactId> 
</dependency> 
<dependency> 
    <groupId>com.sun.mail</groupId> 
    <artifactId>javax.mail</artifactId> 
</dependency> 
<dependency> 
    <groupId>com.sun.mail</groupId> 
    <artifactId>imap</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>jcl-over-slf4j</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>jul-to-slf4j</artifactId> 
</dependency> 
<dependency> 
    <groupId>ch.qos.logback</groupId> 
    <artifactId>logback-classic</artifactId> 
</dependency> 

Czy ktoś może mi pomóc to rozgryźć? Wygląda na to, że maven obsługuje wersjonowanie z pewną domyślną strategią.

+0

czy można wyświetlić wyjście 'mvn -version' tylko dla pewności? –

+2

Praca maven nie jest możliwa bez zdefiniowania wersji artefaktów. Powinny one zostać zdefiniowane gdzieś w znaczniku 'dependencyManagement' w module częściowym lub macierzystym. Sprawdź swoją hierarchię pom. Użyj pomocy mvn: effective-pom – Ozgen

+1

Sprawdziłeś za pomocą 'mvn help: effective-pom -Doutput = result.xml' i sprawdzisz, czy nie ma zależności Management. – khmarbaise

Odpowiedz

18

OK, myślę, że sam na to odpowiem. Oczywiście przyjrzałem się zależności: drzewo, ale wszystkie zależności, o których wspomniałem, gdzie członkowie drzewa pierwszego poziomu. Co nie udało mi się zauważyć od razu, że dependencyManagement nie jest obecny w macierzystym, ale jest jednak obecna w submodules, a co bardziej interesujące, że zawiera:

 <dependency> 
      <groupId>io.spring.platform</groupId> 
      <artifactId>platform-bom</artifactId> 
      <version>1.0.2.RELEASE</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 

Nigdy nie używany Wiosna IO Platformę wcześniej, więc jest to dla mnie zupełnie nowa koncepcja. Jak się okazało, platforma zawiera kilka wstępnie skonfigurowanych zależności: http://docs.spring.io/platform/docs/current/reference/htmlsingle/#appendix-dependency-versions

+1

Nie jest to związane ze sprężyną, ale ma wzór BOM "zestawienia materiałów", który służy do definiowania zależności wymaganych do korzystania z niektórych bibliotek. Zobacz [Mechanizm zależności Maven] (https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html) – estani

13

Jest niemożliwe, aby maszyna działała bez definiowania wersji artefaktów. Powinny być zdefiniowane gdzieś w znaczniku dependencyManagement w module częściowym lub rodzica. Sprawdź swoją hierarchię pom. Użyj mvn help:effective-pom w katalogu modułów projektowych. Możesz także użyć mvn dependency:tree, aby dowiedzieć się, które artefakty - wraz z pełną informacją o artefakcie, w tym numerami wersji - zostaną rozwiązane w wyniku zarządzania zależnościami.

Powiązane problemy