Maven: замена свойства не выполняется для тега / project / version из pom? - PullRequest
16 голосов
/ 10 сентября 2010

http://maven.apache.org/pom.html#Properties говорит, что свойство "значения доступны в любом месте POM".

Должно ли это чтение "доступно в большинстве местах в POM"?

Я могу указать версию зависимости без проблем, вот так:

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>${junit.version}</version>
    <scope>test</scope>
</dependency>

Но как насчет версии самого проекта, например, так:

<project xmlns="http://maven.apache.org/POM/4.0.0" ...>

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mycompany.app</groupId>
    <artifactId>my-app</artifactId>
    <version>${myversion}</version>

    <properties>
        <myversion>8</myversion>
    </properties>

    <modules>
        <module>alpha</module>
        <module>beta</module>
    </modules>
    ...

Если я попробую это не примет значение 8. Здесь я определил $ {myversion} в pom, но, похоже, то же самое имеет место, если я укажу -Dmyversion = 8 в командной строке.

Если одинмодуля указывает его родителя с жестко запрограммированным номером версии, например, так:

<parent>
    <groupId>com.mycompany.app</groupId>
    <artifactId>my-app</artifactId>
    <version>8</version>
</parent>

Когда я пытаюсь собрать потом, когда maven приходит посмотреть на модуль pom, он скажет, что не может найти данный родительский pom с версией8.

Однако если я жестко закодирую версию в родительском 8, а не с помощью $ {myversion}, то все работает нормально.

Так что кажется вмне, что замена свойства не происходит для / project / version tag родительского пом.

Это тот случай или есть какое-то другое объяснение того, что я, похоже, вижу?

С уважением,

/ Джордж

1 Ответ

31 голосов
/ 10 сентября 2010

Замена свойства не допускается в /project/parent/(groupId|artifactId|version) или /project/(groupId|artifactId|version) по проекту в Maven 2.x.

Итак, правила таковы:

  • жесткий код версии в верхнем project/version элементе.
  • жесткий код версии в элементе project/parent/version дочерних элементов.
  • дети наследуют версию, если не хотят ее переопределить
    • поэтому нет необходимости в ${myversion} свойстве
  • используйте ${project.groupId} и ${project.version} для межмодульных зависимостей.

Вы найдете бесконечное количество потоков по этой теме в списке пользователей maven (см., Например, Свойства родительской версии Pom ), и я просто скажу, что любая попытка обойти вышеуказанные правила неправильно и не работает.

Версия меньше parent будет разрешена в Maven 3.1.

Смотри также

...