Подтвердить что ты не робот

"Предоставленная" зависимость в Gradle

build.gradle мной build.gradle, и есть некоторые зависимости, объявленные как provided но в документации я не вижу этой области зависимостей.

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web:1.2.4.RELEASE")
    ....

    provided 'backport-util-concurrent:backport-util-concurrent:3.1'
    provided 'org.javolution:javolution:[email protected]
    ....
}

Это обеспечивается плагином? Если так, как я узнал, к какому плагину это относится?

В чем разница между provided областью и областью зависимости во runtime в Gradle?

4b9b3361

Ответ 1

Что такое область provided?

Предположим, что a jar необходим для компиляции вашего кода, но jar присутствует в коллекции библиотеки производственной среды. Тогда вам не нужно упаковывать банку с архивами проектов. Чтобы поддержать это требование, Maven имеет область с именем provided. Если вы заявляете какую-либо зависимость jar как provided, тогда эта банка будет присутствовать в вашем пути к классам во время компиляции, но не будет упакована в ваш архив проекта.

provided область очень полезна, особенно в веб-приложениях. Например, servlet-api.jar необходимо присутствовать в вашем пути к классу для компиляции вашего проекта, но вам не нужно это, чтобы упаковать файл servlet-api.jar с помощью war. С областью provided можно достичь этого требования.

Нет рамки, определенной в плагине Gradle java с именем provided. Также не в плагинах war или android. Если вы хотите использовать область provided в своем проекте, вы должны определить ее в своем файле build.gradle. Ниже приведен фрагмент кода для объявления области provided в gradle:

configurations {
    provided
}

sourceSets {
    main { compileClasspath += configurations.provided }
}

Теперь, ваш второй вопрос:

В чем разница между предоставленной и рабочей средой зависимости в Gradle?

Чтобы ответить на этот вопрос, я сначала определю зависимость compile. compile зависимости - это зависимости, которые необходимы для компиляции вашего кода. Теперь представьте, что если ваш код использует библиотеку с именем X, тогда вы должны объявить X как свою зависимость от времени компиляции. Также представьте, что X использует другую библиотеку Y внутренне, и вы объявили Y как вашу зависимость от времени выполнения.

Во время компиляции Gradle добавит X в ваш путь к классам, но не добавит Y. Поскольку для компиляции не требуется Y. Но он будет собирать как X, так и Y с вашим архивом проекта, поскольку для запуска архива проекта в рабочей среде необходимы как X, так и Y. Как правило, все зависимости, необходимые в производственной среде, известны как зависимость runtime.

В официальной документации Gradle говорится, что runtime зависят от зависимостей, требуемых производственными классами во время выполнения По умолчанию также включены зависимости времени компиляции. ".

Теперь, если вы уже давно это знаете, вы уже знаете, что provided - это зависимость compile, которую мы не хотим присутствовать в зависимости от runtime (в принципе, мы не хотим это пакет с архивом проекта).

Ниже приведен пример области provided и runtime. Здесь compile относится к зависимостям, которые необходимы для компиляции проекта, а non-compile относится к зависимостям, которые не требуются для компиляции проекта.

Ответ 3

Для дальнейшего разъяснения, в последней версии Gradle 5.5 есть опции compileOnly (такие же, как и предоставленные) и runtimeOnly. Новая опция компиляции и среды выполнения по умолчанию - реализация.