Maven: Свойство замены не сделано для / Project / Version Tag of Pom?
-
02-10-2019 - |
Вопрос
http://maven.apache.org/pom.html#properties. Говорят, что имущество «ценности доступны в любом месте в рамках 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>
...
Если я попробую этоu003Cversion> Не примет значение 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/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.