2016-11-01 15 views
5

Речь идет о Maven POM вВозможно ли иметь родительскую версию как свойство для предоставления детям?

Если я хотел бы иметь версию моего Родителя также быть версии моих зависимостей я должен установить значение Thats недвижимости составляет $ {project.parent.version}.

Проблема возникает тогда, когда ребенок моего основного ПОМ (который имеет свойство $ {project.parent.version} внутри него, потому что он является родительским проектом, который я не администрирую), пересчитайте свойство и подумайте, что значение созданного свойства теперь является версией моего основного ПОМ.

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

В конце концов, это свойство $ {dependency.version} в детской Pom 1.0.0 вместо 1.2.3. Является ли это желательным поведением Maven? И что я мог сделать, чтобы он работал?

Вещи, которые не могут быть изменены:

  • SuperPom
  • Главная Pom Версия

ответ

4

Maven первый процесс наследования, чтобы построить эффективную ПОМ, а затем расширение технологических переменных.

Другими словами, содержимое родительского и дочернего pom обрабатывается как единый объединенный файл для каждого дочернего pom. Поэтому, когда ваш дочерний pom обрабатывается, $ {project.parent.version} равен 1.0.0, а не 1.2.3.

Я не мог найти способ ссылки на «бабушку и дедушку» помпе, поэтому кажется, что единственное решение - поставить версию как статическое число как в parent.version, так и в properties.dependency.version.

+0

Итак, при изменении версии SuperPom единственным возможным способом является изменение 2 полей (версия в родительском и собственном объекте)? – Serverfrog

+0

В принципе, да. И вы не можете использовать переменную в поле parent.version, потому что maven вы пытаетесь загрузить родителя перед обработкой переменных. – Vinicius

+0

Это абсолютно удручающе. – Matthias