2016-05-18 6 views
1

С maven мы можем исключить некоторые транзитивные зависимости.запретить импорт некоторых транзитивных зависимостей maven

Но что, если они нам понадобятся во время выполнения, и все еще как архитектор, я не хочу, чтобы они использовались и стали зависимыми от API.

Есть ли инструмент для определения и проверки нежелательной используемой зависимости (т. Е. Импортированной в некоторый Java-класс)?

Поиск здесь дает мне намек на мавена In maven, can you disallow usage of transitive dependency in your code but still keep it in the classpath?

Но это может быть трудоемким, чтобы определить. Возможно, следует использовать инструменты IDE?

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

+0

https://github.com/nebula-plugins/gradle-lint-plugin не является ни maven, ни отключением зависимостей, но он сканирует фактические зависимости в коде, чтобы выяснить, какие из них [unused] (https://github.com/nebula-plugins/gradle-lint-plugin/wiki/Unused-Dependency-Rule). Возможно, вы могли бы адаптировать эту часть. – zapl

+0

Приятно знать, но для maven вам понадобятся похожие. –

+0

Я бы предложил глубокий взгляд на http://jqassistant.org/, который может определять такие правила и т. Д. – khmarbaise

ответ

0

При работе с maven существует концепция зависимости. Обычно для приложений Java EE вы видите, что 3 области охвачены больше всего:

Компиляция - Это область по умолчанию, используемая, если ни один не указан. Они будут доступны во всех классах объектов проекта.

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

Test - это зависимость, необходимая для тестирования, но не требуется для нормального использования приложения

Based от вашего использования случае я считаю, что вы хотите использовать прилагаемую сферу для зависимости где зависимость требуется во время выполнения, но не должна быть доступна для приложения во время компиляции. Вы можете узнать больше об областях зависимостей по адресу: https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

+0

Это не помешает кому-либо использовать класс из модуля реализации, который не должен использоваться. В этом случае вместо этого следует использовать класс из модуля API. – khmarbaise

+0

Одним из решений этой ситуации является упаковка спецификации/API отдельно от реализации. Только реализация будет доступна во время выполнения. Существует несколько рамок, которые позволяют вам это делать. Например, OSGI. –

Смежные вопросы