Maven: Свойство замены не сделано для / Project / Version Tag of Pom?

StackOverflow https://stackoverflow.com/questions/3684664

Вопрос

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.

Смотрите также

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top