2016-11-01 12 views
5

Chodzi o to, że Maven POM jestCzy możliwe jest posiadanie wersji nadrzędnej jako Właściwość dla dzieci?

Jeśli chciałbym, aby wersja mojego nadrzędnego również była wersją moich zależności, należy ustawić wartość właściwości thats $ {project.parent.version}.

Problem pojawia się wtedy, gdy dziecko z mojego głównego POM (Które ma w sobie właściwość $ {project.parent.version}, ponieważ jest to rodzic w projekcie, którego nie administruję) ponownie oblicza nieruchomość i myślę, że wartość utworzonej właściwości jest teraz wersją mojego głównego POM.

--SuperParent (not in my Administration) | Version = 1.2.3 

----MainPom | Version = 1.0.0 | Property <test>${project.parent.version}</test> -> 1.2.3 

------Child Pom | Version 1.0.0 | Property ${test} is now 1.0.0 

<project> 
<!-- Super Pom --> 
<groupId>groupId</groupId> 
    <artifactId>artifactId</artifactId> 
    <version>1.2.3</version> 
</project> 

<project> 
<!-- MainPom --> 
    <groupId>othergroupId</groupId> 
    <artifactId>otherartifactId</artifactId> 
    <version>1.0.0</version> 
    <parent> 
     <groupId>groupId</groupId> 
     <artifactId>artifactId</artifactId> 
     <version>1.2.3</version> 
    </parent> 
    <properties> 
    <dependency.version>${project.parent.version}</dependency.version> 
    </properties> 
    <dependencyManagement> 
     <dependencies> 
      <dependency> 
       <groupId>dependencyGroupId<groupId> 
       <artifactId>dependency</artifactId> 
       <version>${dependency.version}</version> 
      </dependency> 
     </dependencies> 
    </dependencyManagement> 
</project> 
<project> 
<!-- ChildPom --> 
    <groupId>childGroupId</groupId> 
    <artifactId>childArtifactId</artifactId> 
    <version>1.0.0</version> 
    <parent> 
     <groupId>othergroupId</groupId> 
     <artifactId>otherartifactId</artifactId> 
     <version>1.0.0</version> 
    </parent> 
     <dependencies> 
      <dependency> 
       <groupId>dependencyGroupId<groupId> 
       <artifactId>dependency</artifactId> 
      </dependency> 
     </dependencies> 
</project> 

W końcu jest Property $ {dependency.version} w Pom Child 1.0.0 zamiast 1.2.3. Czy to pożądane zachowanie Mavena? I co mogę zrobić, żeby to zadziałało?

Rzeczy, które nie mogą być zmienione:

  • SuperPom
  • główna Pom Wersja

Odpowiedz

4

Maven pierwszy proces dziedziczenia zbudować skuteczną pom a następnie zmiennych procesowych ekspansję.

Innymi słowy, zawartość macierzystego i dziecięcego pom jest przetwarzana jako pojedynczy scalony plik dla każdego pom dziecka. Więc kiedy twoja pom jest przetwarzana, $ {project.parent.version} to 1.0.0, a nie 1.2.3.

Nie mogłem znaleźć sposobu na odniesienie do "dziadka" pom, więc wydaje się, że jedynym rozwiązaniem jest umieszczenie wersji jako numeru statycznego zarówno w pliku rodzic.version, jak i właściwości.dependency.version.

+0

Więc kiedy zmienia się wersja SuperPom, jedynym możliwym sposobem jest zmiana 2 pól (wersja w jednostce nadrzędnej i własności)? – Serverfrog

+0

Zasadniczo tak. I nie można użyć zmiennej w polu parent.version, ponieważ próbujesz załadować element nadrzędny przed przetworzeniem zmiennych. – Vinicius

+0

To jest absolutnie przygnębiające. – Matthias

Powiązane problemy