Существует библиотека A, которая зависит от библиотеки B. Мой проект имеет A как заявленную зависимость, но также втягивает B в мой путь к классу проекта. Есть ли подключаемый модуль, который может запретить использование классов из библиотеки B в моем проекте?
Я знаю об механизме исключения зависимостей, но это не вариант, поскольку, если я исключаю B, программа не будет работать, поскольку A полагается на нее. По той же причине maven-enforcer-plugin не работает (по крайней мере, стандартные правила для него).
То, что я ищу, - это своего рода подключаемый модуль, который может анализировать исходный или байтовый код и выходить из строя, если пакеты из транзитивных зависимостей импортируются из моих классов проектов.
(a) Сделать A зависимость времени компиляции и исключить B в этой строфе.
(b) Добавить B как зависимость от времени выполнения.
Это имеет эффект, который вы хотите, то есть B не доступен во время компиляции, но включен во время выполнения. Не нужно прибегать к дополнительному инструменту, который проверяет политики на основе пакетов.
Вот пример (замените groupId и версию в соответствии с вашей ситуацией):
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>A</artifactId>
<version>${project.version}</version>
<exclusions>
<exclusion>
<groupId>${project.groupId}</groupId>
<artifactId>B</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>B</artifactId>
<version>${project.version}</version>
<scope>runtime</scope>
</dependency>
</dependencies>