2016-12-13 8 views
1

Я пытаюсь использовать 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 
      } 
     } 
    } 
    } 
} 

Я хотел бы стратегию настройки разрешения продолжать работать при использовании композитной компиляции.

ответ

0

Это текущее известное ограничение на составные сборки. Это обсуждается в this topic.