Gradle: что такое настройка по умолчанию и как ее изменить?
Когда я запускаю задачу "зависимости", есть несколько разделов: компиляция, время выполнения, testCompile...
Один из этих разделов - "default - Конфигурация для артефактов по умолчанию". Что это за раздел и для чего он используется?
Как мне изменить то, что находится в "конфигурации по умолчанию"?
Детали: Gradle 1.7
Ответы
Ответ 1
Если ваша сборка не публикует модули Ivy, конфигурация default
в основном имеет значение при работе с зависимостями проекта в многопроектной сборке. Учитывая многопроектную сборку с проектами A и B, если A объявляет зависимость проекта от B без явного указания конфигурации (например, dependencies { compile project(":B") }
, A (точнее конфигурация A compile
) будет зависеть от конфигурации проекта B default
Другими словами, dependencies { compile project(":B") }
является ярлыком для dependencies { compile project(path: ":B", configuration: "default") }
.
Конфигурация default
простирается от конфигурации runtime
, что означает, что она содержит все зависимости и артефакты конфигурации runtime
и потенциально больше. Вы можете добавлять зависимости и артефакты обычным способом (используя блок dependencies
/artifacts
в B build script). В качестве альтернативы, B может объявить пользовательскую конфигурацию, и A может зависеть от этого, явно называя эту конфигурацию (например, dependencies { compile project(path: ":B", configuration: "myCustomConfig") }
.
Ответ 2
При использовании Java-плагина gradle конфигурация "по умолчанию" extendsFrom "runtime", "runtimeOnly", "creation"
Если вы не используете плагин Java, вы можете определить его самостоятельно следующим образом:
configurations {
"default"
}
Плагин Java устанавливает здесь конфигурацию по умолчанию: https://github.com/gradle/gradle/blob/85d30969f4672bb2739550b4de784910a6810b7a/subprojects/plugins/src/main/java/org/gradle/api/plugins/JavaPlugin.java#L437
Документация не так хороша в этой области.
Пример "обслуживания" артефакта по умолчанию из составной сборки.
В этом примере создается подпроект, который ссылается на зависимость в другом проекте. Это может быть необходимо при работе с составными сборками, так как от них может зависеть только группа "по умолчанию".
Мы используем это, чтобы взять много jar файлов из одного проекта и использовать его в качестве разных зависимостей, когда ссылаемся на проект как на составную сборку.
apply plugin: 'base'
configurations {
depend
}
dependencies {
depend project(path: ':', configuration: 'ConfWithArtifact')
}
artifacts {
"default" (file: configurations.depend.singleFile) {
builtBy(configurations.depend)
}
}