Подтвердить что ты не робот

Maven: замена свойств не выполняется для /project/version tag pom?

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

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

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

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

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

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

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

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

Привет,

/George

4b9b3361

Ответ 1

Подстановка свойств не допускается в /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.

См. также