gpt4 book ai didi

gradle - 配置子项目后执行 Gradle 任务

转载 作者:行者123 更新时间:2023-12-02 09:24:26 25 4
gpt4 key购买 nike

我有一个多项目 Gradle 构建,其中为子项目分配了独立于根项目的版本号。我想将此版本号注入(inject)到每个子项目中的几个资源文件中。通常,我会通过为根构建中的每个子项目配置 processResources 任务来做到这一点。但是,问题在于 Gradle 似乎在加载子项目的构建文件之前执行了 processResources 任务,并且正在注入(inject)“未指定”作为版本。

目前,我的项目如下所示:

/settings.gradle

include 'childA' // ... and many others

/build.gradle
subprojects {
apply plugin: 'java'
apply plugin: 'com.example.exampleplugin'
}

subprojects {
// This has to be configured before processResources
customPlugin {
baseDir = "../common"
}

processResources {
// PROBLEM: version is "unspecified" here
inputs.property "version", project.version

// Inject the version:
from(sourceSets.main.resources.srcDirs) {
include 'res1.txt', 'res2.txt', 'res3.txt'
expand 'version':project.version
}
// ...
}
}

/childA/build.gradle
version = "0.5.424"

我考虑添加 evaluationDependsOnChildren()在根的 build.gradle 的开头,但这会导致错误,因为 childA/build.gradlecustomPlugin { ... } 之前运行.我尝试过使用dependsOn、mustRunAfter 和其他技术,但似乎都没有达到预期的效果。 (也许我对生命周期不是很了解,但是好像root项目是在子项目之前配置和执行的。不应该是先配置root,然后配置子项目,然后执行吗?)

如何在没有大量复制/粘贴或样板的情况下将每个子项目的版本注入(inject)适当的资源文件?

最佳答案

您可以尝试使用此方法,并带有一个钩子(Hook):

gradle.projectsEvaluated({
// your code
})

关于gradle - 配置子项目后执行 Gradle 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39038597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com