Ответ 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
.
Теперь, если вы уже давно это знаете, вы уже знаете, что provided
- это зависимость compile
, которую мы не хотим присутствовать в зависимости от runtime
(в принципе, мы не хотим это пакет с архивом проекта).
Ниже приведен пример области provided
и runtime
. Здесь compile
относится к зависимостям, которые необходимы для компиляции проекта, а non-compile
относится к зависимостям, которые не требуются для компиляции проекта.