gpt4 book ai didi

gradle - 无法在多项目构建中覆盖 Gradle 中的属性

转载 作者:行者123 更新时间:2023-12-04 04:06:45 24 4
gpt4 key购买 nike

我已经设置了一个多模块 Gradle 构建,里面有几个模块。我要做的很简单——当我创建一个发行版时,我总是喜欢使用一个名为“dist/lib”的目录,但一个项目除外,它应该只是“dist”。

显而易见的解决方案 - 创建一个名为“distLibDir”的变量,并为有问题的特定项目覆盖它,但似乎不起作用。

这是子模块的代码:

project.version = '1.1'

project.ext.distLibDir = 'dist'

dependencies {
....
}

这是顶级项目的代码:
subprojects {
apply plugin: 'java'
apply plugin: 'eclipse'

if (! project.hasProperty('distLibDir')) {
project.ext.distLibDir = 'dist/lib'
}

task copyLib(type: Copy) {
into project.distLibDir
from configurations.runtime
}

task dist(type: Copy, dependsOn: [clean, jar, copyLib]) {
from 'build/libs'
into project.distLibDir
}
}

无论我尝试什么,该目录总是显示为“dist/lib”,并且我无法将其覆盖为仅针对那个模块而有所不同。有谁知道这里出了什么问题?

最佳答案

默认情况下,父项目的构建脚本在子项目的构建脚本之前被评估。因此,在您检查其是否存在时,该属性并不存在。

有几种解决方案。一种是在父脚本的suprojects 中设置属性值。 block ,基于当前项目的名称或路径(例如 if (project.path == ":foo") {...} else {...} )。另一种是动身subprojects block (或至少使用该属性的部分)到脚本插件中,并从每个构建脚本中应用该插件(例如 apply from: "$rootDir/gradle/foo.gradle" )。这使您有机会在应用脚本插件之前设置属性的值。另一个解决方案(我个人尽量避免)是保持原样并调用 evaluationDependsOnChildren()在从父构建脚本访问属性之前。

关于gradle - 无法在多项目构建中覆盖 Gradle 中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22158102/

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