В maven, можете ли вы запретить использование транзитивной зависимости в своем коде, но при этом оставить ее в пути к классам?

1

Существует библиотека A, которая зависит от библиотеки B. Мой проект имеет A как заявленную зависимость, но также втягивает B в мой путь к классу проекта. Есть ли подключаемый модуль, который может запретить использование классов из библиотеки B в моем проекте?

Я знаю об механизме исключения зависимостей, но это не вариант, поскольку, если я исключаю B, программа не будет работать, поскольку A полагается на нее. По той же причине maven-enforcer-plugin не работает (по крайней мере, стандартные правила для него).

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

Теги:
maven

1 ответ

2
Лучший ответ

(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>
  • 0
    Хм, не думал об этом, но да, это может полностью сработать. В моем конкретном случае это не просто одна транзитивная зависимость, а скорее дюжина или около того, так что это будет немного хлопотно .. Спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню