Две зависимости Maven с различной областью действия
Если у меня есть следующие две зависимости в том же pom.xml
файл:
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</dependency>
И я хотел бы удалить избыточность. Так что я должен удалить тот с областью как runtime
потому что это входит в другую зависимость?
Также я был бы рад понять, почему можно определить зависимость с областью runtime
,
1 ответ
От введения к механизму зависимости - область зависимости:
compile
- Это область по умолчанию, используемая, если ни одна не указана. Зависимости компиляции доступны во всех классах пути проекта. Кроме того, эти зависимости распространяются на зависимые проекты.
(...)
runtime
- Эта область указывает, что зависимость не требуется для компиляции, но предназначена для выполнения. Он находится во время выполнения и пути к классам теста, но не в пути к классам компиляции.
Так что если у вас есть compile
зависимость, runtime
уже включен и потому лишний.
Как пример того, когда использовать runtime
возьмите API ведения логов SLF4J: вы компилируете свои исходники slf4j-api.jar
(compile
зависимость), но не фактическая реализация, которая распространяется отдельно (и есть несколько на выбор). Однако при упаковке вашего приложения или выполнении модульных тестов Maven все равно должен включать jar реализации, например slf4j-simple.jar
(runtime
зависимость), потому что иначе ничего не будет зарегистрировано.