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

Какая версия будет, когда я не укажу ее в Maven pom.xml?

Недавно я написал проект с maven, но у меня есть вопрос о версии в maven pom.xml.

Если я напишу такую ​​зависимость

<dependency>
    <groupId>foo</groupId>
    <artifactId>bar</artifactId>
     <!--No version here-->
</dependency>

какая версия будет

  • в простом проекте, подпроект

  • как зависимость в другом проекте, а в проекте используется foo-bar-1.0.0

4b9b3361

Ответ 1

Часть 1. вашего вопроса: если вы не укажете версию, возможны разные результаты:

a) вы получите сообщение об ошибке...

[ERROR]   The project org.example:myproject:0.5-SNAPSHOT (D:\src\myproject\pom.xml) has 1 error
[ERROR]     'dependencies.dependency.version' for foo:bar:jar is missing. @ line 39, column 14

b) если вы определили версию в управлении зависимостями родительского pom проекта, то эта версия будет выполнена. Родитель проекта не должен быть вложенным суперпроектом. Это может быть просто набор соответствующих определений.

c) если другая зависимость вашего проекта также зависит от foo: bar и указывает версию, то эта версия берется. Maven 2 имеет механизм, называемый транзитивные зависимости. Если версия зависимостей явно не указана для артефакта, она ищет дерево зависимостей и использует ближайшее определение в дереве. Если есть два ближайших определения, то первое объявление выигрывает (с maven 2.0.9).

Часть 2: Я не уверен, но, возможно, механизм транзитивной зависимости также работает именно так. Но документация (насколько я понял) не упоминает об этом случае.

Но почему-то я чувствую, что вторая часть вашего вопроса не имеет смысла: я предполагаю, что для того, чтобы использовать артефакт в качестве зависимости, вам сначала нужно построить его. Поэтому вам нужно будет знать версию зависимостей задолго до того, как она будет использована как сама зависимость.