Разница между зависимостями и зависимостями в Gradle - PullRequest
0 голосов
/ 10 мая 2018

В чем разница между ключевым словом depends и ключевыми словами dependencies в файле сборки Gradle? Я встречал эти ключевые слова в следующих контекстах:

зависит от:

project(':tools:bnd-module-plugin') {
  description = "bnd plugin to build moduleinfo with ${rootProject.description}"
  sourceSets.main.java.srcDirs += project(':asm').sourceSets.main.java.srcDirs
  depends = ['biz.aQute.bnd:biz.aQute.bnd:3.4.0']
}

зависимости:

subprojects {
  apply plugin: 'com.github.sherter.google-java-format'
  googleJavaFormat.toolVersion = '1.4'
  compileTestJava {
    sourceCompatibility = '1.8'
    targetCompatibility = '1.8'
  }
  dependencies {
    requires.each { projectName -> compile project(projectName) }
    depends.each { artifactName -> compile artifactName }
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.1.0',
        'org.junit.jupiter:junit-jupiter-params:5.1.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.1.0'
    testCompile project(':asm-test')
  }
}

1 Ответ

0 голосов
/ 10 мая 2018

Ключевое слово dependencies предоставляется методом экземпляра Project, с которым сравнивается файл build.gradle. Это позволяет конфигурировать несколько типов зависимостей через DependencyHandler. Вы можете добавить файловые зависимости, зависимости проекта и зависимости модуля, которые могут быть разрешены из репозиториев Maven и Ivy.

Поскольку он предоставляется экземпляром Project напрямую, он доступен в каждом проекте Gradle.

Ключевое слово depends не существует в Gradle API. Тем не менее, Gradle предоставляет множество возможностей для расширения и программирования ваших сценариев сборки. С помощью так называемых дополнительных свойств можно определить дополнительные свойства в области действия объектов Gradle, например задачи и проекты. Затем эти дополнительные свойства можно использовать как обычные свойства Gradle, как в вашем примере.

Я нашел в ваших примерах скрипт полной сборки . В начале скрипта закрытие subprojects используется для определения дополнительных свойств для всех подпроектов:

subprojects {
    [...]
    ext.provides = []  // The provided java packages, e.g. ['org.objectweb.asm']
    ext.requires = []  // The required Gradle projects, e.g. [':asm-test']
    ext.depends = []   // The external dependencies, e.g. ['junit:junit:4.12']
    [...]
}

provides, required и depends - это списки Groovy, которые затем используются для хранения строк.

Ваш первый пример кода устанавливает новый список для дополнительного свойства depends подпроекта :tools:bnd-module-plugin.

Ваш второй использует эти списки для добавления зависимостей модуля (depends) или проекта (requires) ко всем подпроектам.

Как видите, depends - это просто часть пользовательского скрипта Gradle, а не официальный API Gradle, в отличие от dependencies.

...