Почему Maven 3 отказывается от поддержки объявления версии приложения $?

Как видно из названия, я хочу спросить, что в случае Maven 3 нет поддержка версии $ в pom.xml больше не поддерживается. Неужели мы действительно должны писать константу каждый раз в каждом проекте в каждом pom.xml и связанных файлах конфигурации снова и снова? Как этого избежать? Как мы можем использовать такой метод управления версиями, как $ version?


person javatar    schedule 13.05.2010    source источник


Ответы (3)


Выражение ${version} устарело, вместо него следует использовать ${project.version}, но оба они по-прежнему поддерживаются, и вам определенно не нужно настраиваемое свойство.

Для меня с Maven 3 отлично работает следующее:

<dependency>
  <groupId>${project.groupId}</groupId>
  <artifactId>services</artifactId>
  <version>${project.version}</version>
  <type>ejb</type>
</dependency>

А также взгляните на мой предыдущий ответ на Предупреждение об использовании project.parent.version в качестве версии модуля в Maven 3, как вы используете version (на основе того, что я видел в комментариях в другом ответе) не имеет большого смысла ИМХО, и Maven 3 на самом деле любезно предлагает следовать лучшей практике. Просто наследуйте версию.

person Pascal Thivent    schedule 13.05.2010

Использование макроса внутри верхнего элемента <version/> и версии в элементе <parent/> никогда не работало в maven 2. Похоже, что он работал, но не вызвал ничего, кроме путаницы ниже по течению. Если вы говорите не об этом, уточните, пожалуйста, свой вопрос.

person bmargulies    schedule 13.05.2010
comment
Я говорю о декларации ‹version› $ {projectVersion} ‹/version›. Вместо того, чтобы, скажем, писать такую ​​версию, как ‹version› 0.0.1 ‹/version›, мы могли бы написать $ {projectVersion} раньше, но в maven3 она его не поддерживает. Я понял это из предупреждения, которое он выдает прямо во время чистой установки. На консоли четко указано, что версия должна быть постоянной. Однако до maven3 он никогда не предупреждал об этом. Итак, в maven3 объявление $ {projectVersion} (для моего примера) между тегами версии больше не поддерживается. В результате, есть ли какая-нибудь идея или метод, который позволил бы мне использовать его снова? - person javatar; 13.05.2010
comment
В каком содержании? В обычной зависимости или внутри ‹parent›? - person bmargulies; 13.05.2010
comment
В чем проблема с $ {project.version}, обычно вам не нужно. Если вы выпускаете новую версию, она автоматически заменяет старые версии новыми. Значит, я не вижу необходимости в макросе? - person khmarbaise; 13.05.2010
comment
И снова привет, вот что находится внутри верхнего pom.xml; ‹ModelVersion› 4.0.0 ‹/modelVersion› ‹groupId› com.mp.myproject ‹/groupId› ‹artifactId› myproject ‹/artifactId› ‹name› myproject Maven Главная ‹/name› ‹packaging› pom ‹/packaging› ‹свойства ›‹ProjectVersion› 2.3 ‹/projectVersion› ‹/properties› ‹version› $ {projectVersion} ‹/version› ... ‹modules› ‹module› ../myproject_domain ‹/module› ‹module› ../myproject_ejb - person javatar; 13.05.2010
comment
Хорошо, и другие pom.xml в модулях: ‹parent› ‹artifactId› myproject ‹/artifactId› ‹groupId› com.mp.myproject ‹/groupId› ‹version› $ {projectVersion} ‹/version› relativePath ›../ myproject / pom.xml ‹/relativePath› ‹/parent› - person javatar; 13.05.2010

Ошибка ниже показывает устаревание $(artifactId} и ${version}.

[ВНИМАНИЕ] Выражение $ {artifactId} устарело. Вместо этого используйте $ {project.artifactId}. [ВНИМАНИЕ] Выражение $ {version} устарело. Вместо этого используйте $ {project.version}. [ПРЕДУПРЕЖДЕНИЕ] [ПРЕДУПРЕЖДЕНИЕ] Настоятельно рекомендуется исправить эти проблемы, поскольку они угрожают стабильности вашей сборки. [ПРЕДУПРЕЖДЕНИЕ] [ПРЕДУПРЕЖДЕНИЕ] По этой причине будущие версии Maven могут больше не поддерживать сборку таких некорректных проектов.

Предупреждающее сообщение объясняет это. Заменить ${artifactId} на ${project.artifactId} и ${version} на ${project.version}

person youinc    schedule 17.02.2016