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
Ответы
Ответ 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.
См. также