从另一个gradle项目的配置扩展
我不想用项目a中的配置扩展项目b中的配置 如果两种配置位于同一项目中,则可以执行以下操作:从另一个gradle项目的配置扩展,gradle,Gradle,我不想用项目a中的配置扩展项目b中的配置 如果两种配置位于同一项目中,则可以执行以下操作: configurations.conf1.extendsFrom configurations.conf2 如何在不同的项目中实现相同的配置 下面是一个目前不起作用的最小示例,因为依赖关系不是继承的 文件夹设置示例: a/build.gradle b/build.gradle 格雷德尔酒店 a/build.gradle: repositories { mavenCentral() } confi
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
中的一个配置,该配置尚未被Gradle确认,这就是为什么您会得到一个错误(应该是这样的:projectB
)无法获得未知属性'conf2'…
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')}