Указание версии в Maven необязательной зависимости - PullRequest
0 голосов
/ 03 января 2019

У меня есть библиотечный проект, в котором я рассматриваю возможность добавления некоторых зависимостей как необязательных, поскольку они потребуются только для проектов, компилируемых и работающих на JDK9 +.

Однако документация оопциональные зависимости не проясняют, возможно ли опционально зависеть от конкретной версии, т. е. могу ли я поместить в файл библиотеки pom что-то вроде

<dependency>
    <groupId>com.foo</groupId>
    <artifactId>dependency-a</artifactId>
    <version>2.0</version>
    <optional>true</optional>
</dependency>

И каким-то образом убедиться, что проекты, которые зависят от моей библиотеки итакже желание включить dependency-a будет зависеть от версии 2.0.

Насколько я понимаю, установка dependency-a в качестве необязательного означает, что проекты, зависящие от моей библиотеки, не будут транзитивно зависеть от нее, но они могут явнодобавьте его в свои собственные зависимости, если им нужны некоторые дополнительные (необязательные) функции в моей библиотеке.

Есть ли способ убедиться, что, если они хотят добавить dependency-a, они зависят от конкретной версии?

Что бы произошло, если бы проект в зависимости от моей библиотеки имел

<dependency>
    <groupId>com.foo</groupId>
    <artifactId>dependency-a</artifactId>
    <version>1.0</version>
</dependency>

И версию1.0 не был совместим с версией 2.0?

И если невозможно установить версию на необязательных зависимостях, какой смысл устанавливать версию для необязательной зависимости?

У меня также естьЯ искал плагин Maven Enforcer , который, кажется, способен обрабатывать подобные случаи, но мне было интересно, есть ли лучшее решение.

1 Ответ

0 голосов
/ 03 января 2019

Мое понимание optional следующее:

Если вы объявите зависимость как необязательную, она останется в вашем пути к классам компиляции (так что вам нужна версия), но не будет переходно видимой для пользователей вашегобиблиотека.Таким образом, пользователи вашей библиотеки должны будут сами добавить зависимости (с разумной версией) в свои POM.

Я также не понимаю, как вы хотите использовать плагины принудительного применения, потому что пользователи вашей библиотеки "не увидят"«плагины, которые есть в вашем POM.

Для простоты использования я бы порекомендовал иметь два разных jar для разных версий Java, разделенных по классификатору или по версии (например, 1.2.3-JDK8, 1.20,3-JDK9).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...