我有一个多项目的Gradle构建,其中子项目被分配了独立于根项目的版本号。我想将这个版本号注入每个子项目中的几个资源文件中。通常,我会通过为根构建中的每个子项目配置processResources任务来实现这一点。然而,问题是Gradle似乎在加载子项目的构建文件之前执行processResources任务,并且正在注入“unspecified”作为版本。
目前,我的项目如下所示:
/设置。格拉德尔
include 'childA' // ... and many others
/构建。格拉德尔
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
}
// ...
}
}
/儿童/构建。格拉德尔
version = "0.5.424"
我研究了在root的构建开始时添加evaluationDependsOnChildren()。gradle,但这会导致一个错误,因为childA/build。gradle在customPlugin{…}之前运行
。我尝试过使用dependsOn、mustRunAfter和其他技术,但似乎都没有达到预期效果。(也许我不完全了解生命周期,但似乎根项目是在子项目之前配置和执行的。它不应该配置根项目,然后配置子项目,然后执行吗?)
如何将每个子项目的版本注入到适当的资源文件中,而不需要大量的复制/粘贴或样板文件?
试着这样做:
subprojects { project ->
// your code
}
否则,project将引用未指定版本的根项目。
这是我自己弄明白的。我正在使用初始化。gradle文件将某些内容应用于rootProject,但我需要来自子项目的数据。
第一个选择是在我修改它之前评估每个子项目:
rootProject {
project.subprojects { sub ->
sub.evaluate()
//Put your code here
但我不确定强迫子项目评估会有什么副作用,因此我做了以下工作:
allprojects {
afterEvaluate { project ->
//Put your code here
您可以尝试使用此方法,使用挂钩:
gradle.projectsEvaluated({
// your code
})
我知道我能做到 但这也会得到projA和projB,我只想在c,d,E上运行任务...请让我知道实现这一点的最佳方法。
配置子项目 到目前为止你已经把ToDo项目根据功能拆分成多个模块,接下来可以用之前的方法来定义构建逻辑,下面有几点需要主要: 根目录和子目录使用相同的group和version属性值 所有的子目录都是Java项目需要Java插件来正常工作,所以你只需要在子项目中应用Java插件 web子项目是唯一一个依赖外部库的项目,它需要打包成WAR而不是JAR 子项目之间可以定义模块依赖 接下来你将学习如何定
我面临以下问题。我有一个多模块的Gradle项目。一个模块是我的根项目,第二个模块是集成测试。 为了让我的集成测试运行,复制任务需要首先运行,以便将一些资产移动到项目根目录上的文件夹中。 我已经在我的根项目上定义了这样一个任务,当我试图调用它时,它什么也不做(我尝试了几种不同的调用方式)。 由于失败,我继续在子项目本身上创建了以下任务: 这是我的另一个任务。我的目标是让它将根项目类以及在下生成的j
问题内容: 如果您曾经参与过Salesforce项目的部署或为SF项目设置持续集成,那么您应该知道,在部署元数据组件(类,页面等)之后,您通常还需要执行一些手动任务,例如填充自定义设置值或设置配置文件的字段级安全性。有很多这样无聊的动作。 在我当前的项目中,我再次面对它,我正在寻找如何最大程度地自动化它的方法。为了将项目部署到Org,我们使用Jenkins + Git。因此,我希望例如在每次部署后
我希望在编译任何子项目之前先执行protobuf任务,因为我的子项目依赖于从protobuf任务生成的java文件。那么我怎样才能做到这一点呢?我不想在每个子项目中都有protobuf任务,相反,我只想在根项目中同时完成它,但在编译子项目之前。