У меня есть проект библиотеки, в котором я рассматриваю возможность добавления некоторых зависимостей как необязательных, поскольку они потребуются только для проектов, компилируемых и работающих на 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, поскольку он кажется иметь возможность обрабатывать такие случаи, но мне было интересно, есть ли лучшее решение.