从另一个gradle项目的配置扩展

从另一个gradle项目的配置扩展,gradle,Gradle,我不想用项目a中的配置扩展项目b中的配置 如果两种配置位于同一项目中,则可以执行以下操作: configurations.conf1.extendsFrom configurations.conf2 如何在不同的项目中实现相同的配置 下面是一个目前不起作用的最小示例,因为依赖关系不是继承的 文件夹设置示例: a/build.gradle b/build.gradle 格雷德尔酒店 a/build.gradle: repositories { mavenCentral() } confi

我不想用项目a中的配置扩展项目b中的配置

如果两种配置位于同一项目中,则可以执行以下操作:

configurations.conf1.extendsFrom configurations.conf2
如何在不同的项目中实现相同的配置

下面是一个目前不起作用的最小示例,因为依赖关系不是继承的

文件夹设置示例:
a/build.gradle
b/build.gradle
格雷德尔酒店

a/build.gradle:

repositories {
    mavenCentral()
}
configurations {
    aconf
}
dependencies {
    aconf 'abbot:abbot:1.4.0'
}
b/build.gradle

configurations {
    bconf
}
configurations.bconf.extendsFrom project(':a').configurations.aconf 
include ':a'
include ':b'
设置。渐变

configurations {
    bconf
}
configurations.bconf.extendsFrom project(':a').configurations.aconf 
include ':a'
include ':b'
执行./gradlew:a:dep:b:dep-i表明bconf不会从aconf继承依赖项

Included projects: [root project 'projectDeps', project ':a', project ':b']

> Configure project :
Evaluating root project 'projectDeps' using build file '/projectDeps/build.gradle'.

> Configure project :a
Evaluating project ':a' using build file '/projectDeps/a/build.gradle'.

> Configure project :b
Evaluating project ':b' using build file '/projectDeps/b/build.gradle'.
All projects evaluated.
Selected primary task ':a:dependencies' from project :a
Selected primary task ':b:dependencies' from project :b
Tasks to be executed: [task ':a:dependencies', task ':b:dependencies']
:a:dependencies (Thread[Task worker for ':',5,main]) started.

> Task :a:dependencies
Task ':a:dependencies' is not up-to-date because:
  Task.upToDateWhen is false.

------------------------------------------------------------
Project :a
------------------------------------------------------------

aconf
\--- abbot:abbot:1.4.0
     \--- junit:junit:4.8.2

> Task :b:dependencies
Task ':b:dependencies' is not up-to-date because:
  Task.upToDateWhen is false.

------------------------------------------------------------
Project :b
------------------------------------------------------------

bconf
No dependencies

在多项目构建中,Gradle将按照给定的顺序评估/配置子项目,默认情况下,该顺序是项目名称的字母顺序(我不知道该顺序是否可以更改),因此:

  • 子项目
    projectA
    将在子项目
    projectB
  • projectA
    配置中,您引用了
    projectB
    中的一个配置,该配置尚未被Gradle确认,这就是为什么您会得到一个错误(应该是这样的:
    无法获得未知属性'conf2'…
一种解决方案是让Gradle在创建配置之间的依赖关系之前配置
projectB
:例如,您可以使用
afterEvaluate{}
API,如下所示:

projectA
的build.gradle中:


最好的方法是使用root=>子项目体系结构

因此,在根项目中,您可以定义“共享”配置

根据:

根项目build.gradle

subprojects {
  configurations {
    commonsIo
  }

  dependencies {
    commonsIo 'commons-io:commons-io:2.5'
  }
}
configurations {
  compile.extendsFrom commonsIo
}
子项目build.gradle

subprojects {
  configurations {
    commonsIo
  }

  dependencies {
    commonsIo 'commons-io:commons-io:2.5'
  }
}
configurations {
  compile.extendsFrom commonsIo
}

感谢您提供的评估顺序提示,但我认为这不是问题所在,因为即使评估顺序正确,我也无法让它正常工作。我用一个更清楚的例子更新了我的问题,其中评估顺序不应该是一个因素。我现在重现了您在编辑的问题中描述的问题:似乎在从一个配置创建依赖关系到其他子项目的另一个配置时,依赖关系没有正确继承。我不知道Gradle是否真的支持这一点,我在官方文档/论坛中没有发现类似的情况。也许您应该尝试另一种方法,使用
项目依赖项类型
依赖项{bconf project(路径:':projectA',配置:'aconf')}