build.gradle buildscript зависимости против зависимостей? - PullRequest
1 голос
/ 01 апреля 2020

Может кто-нибудь объяснить мне, как зависимости, перечисленные в «buildscript» в файле build.gradle, отличаются от обычных зависимостей, перечисленных в блоке зависимостей {}? и почему они должны быть перечислены с синтаксисом «реализация»? Я гуглил это, и в ответах говорится о зависимостях в buildscript, и он использовался для «сборки проекта», но я не понимаю этого? Кто-нибудь может дать более четкую картину и ответить?

buildscript:

buildscript
        {
            repositories
                    {
                        maven {
                            url 'myMavenFeed'
                            credentials {
                                username "myUsername"
                                password myPassword
                            }
                        }
                        mavenCentral()
                        jcenter()
                    }
            dependencies
                    {
                        classpath "com.microsoft.azure.sdk.iot:iot-device-client:1.14.1"
                    }
        }

Блок зависимостей:

dependencies
        {
            compile group: 'com.microsoft.azure.sdk.iot', name: 'iot-device-client', version: '1.16.0'
}

1 Ответ

1 голос
/ 02 апреля 2020

Может кто-нибудь объяснить мне, как зависимости, перечисленные в «buildscript» в файле build.gradle, отличаются от обычных зависимостей, перечисленных в блоке зависимостей {}?

Зависимости, определенные в блоке buildscript { }, являются зависимостями, используемыми для построения вашего проекта. Эти зависимости доступны для использования в файле сборки Gradle (build.gradle или build.gradle.kts)

Зависимости, определенные в dependencies { }, относятся к вашему коду приложения .

Так что для ваших примеров в ваших вопросах имеет смысл для Gradle (системы сборки) иметь iot-device-client на своем пути к классам? Почему системе сборки требуется iot-device-client на своем пути к классам для сборки вашего проекта? Это не имеет смысла, поэтому его следует удалить.

Теперь предположим, что вы разрабатываете приложение, требующее некоторой функциональности или класса из iot-device-client. Вам нужен способ добавить эту библиотеку в код / ​​путь к вашему приложению. Затем вы объявляете его как зависимость, как вы это делали выше:

dependencies {
    implementation("com.microsoft.azure.sdk.iot:iot-device-client:1.16.0")
}

Ссылки:

и почему они должны быть перечислены с синтаксисом "реализация"?

implementation известно как конфигурация : A Configuration представляет группу артефактов и их зависимостей

Существует много других конфигураций в зависимости от плагинов, которые вы применить к вашему проекту. Например, если вы примените плагин Java :

plugins {
    id("java")
}

Доступны следующие конфигурации:

  • реализация
  • compileOnly
  • compileClasspath
  • ... и многие другие

Каждый из них имеет свое значение / использование, и я настоятельно рекомендую прочитать о них здесь .

...