Две зависимости 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 зависимость), потому что иначе ничего не будет зарегистрировано.

Другие вопросы по тегам