Я пытаюсь использовать Gradle Composite Builds для создания нескольких независимых проектов в моем решении. Любой плагин, который переопределяет resolutionStrategy
, кажется, игнорируется при построении из сборки Composite.Gradle Composite build игнорирует resolutionStrategy customization для нескольких проектов
Макет проекта
| master <<Composite Build>>
| |\ -- settings.gradle
| | -- build.gradle
| library1
| |\ -- settings.gradle
| | -- build.gradle
| library2
| |\ -- settings.gradle
| | -- build.gradle
| mulitProj << Multi Project>>
| |\ -- settings.gradle
| | -- build.gradle
| - multiProjChild1
| | |\ -- build.gradle
| - multiProjChild2
| | |\ -- build.gradle
Composite Build (мастер):
settings.gradle
===============
includeBuild('../library1') {
dependencySubstitution {
substitute module('com.company:library1') with project (':')
}
}
includeBuild('../library2') {
dependencySubstitution {
substitute module('com.company:library2') with project (':')
}
}
includeBuild('../multiProj')
Сборка (Library1, library2, мультипроект):
Обратите внимание, что все build.gradle
файлов используют spr чтобы поддерживать общие версии библиотек.
build.gradle
============
buildscript {
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
classpath(
'io.spring.gradle:dependency-management-plugin:0.6.1.RELEASE'
)
}
}
allprojects {
apply plugin: "io.spring.dependency-management"
dependencyManagement {
dependencies {
dependency 'com.fasterxml.jackson.core:jackson-core:2.6.3'
dependency 'com.fasterxml.jackson.core:jackson-annotations:2.6.3'
...
}
}
}
...
dependencies {
compile(
'com.fasterxml.jackson.core:jackson-core',
'com.fasterxml.jackson.core:annotations',
...
При создании любого из проектов (library1, library2, multiProj) индивидуально, они строят отлично.
Когда я создаю сборку Composite, master
, настройка разрешения зависимостей, предоставляемая dependencyManagement
, игнорируется для мультипроекта.
Я написал свой собственный плагин Gradle, чтобы посмотреть, могу ли я воспроизвести это. Оказывается, что Closure
в resolutionStrategy.eachDependency
никогда не вызывается при построении многопроектной сборки в композитной сборке.
Например:
/** Gradle plugin to resolve dependencies **/
class DependencyResolverPlugin implements Plugin<Project> {
@Override
public void apply(Project project) {
project.configurations.all {
// Resolve managed dependency versions
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
// !!
// This Closure is never called when this plugin is
// applied to a multi project build, which is built
// in a composite build
// !!
if (details.requested.version == null) {
//Replace the version with the managed dependency version
}
}
}
}
}
Я хотел бы стратегию настройки разрешения продолжать работать при использовании композитной компиляции.