Gradle项目,重复执行的子项目
我有一个带有子项目的项目。布局: rootprojGradle项目,重复执行的子项目,gradle,project,subproject,Gradle,Project,Subproject,我有一个带有子项目的项目。布局: rootproj --次级J1 ----mybuild.number --次级J2 --build.gradle --渐变属性 --设置。渐变 mybuild.number 格雷德尔酒店 格雷德尔先生 当我跑的时候 gradle-q:hello 或 gradle-q:hello 或 格拉德尔 从rootproj,我总是得到例如 从J1:24开始 生成目录:D:\rootproj\subboj2\build 从J1:25开始 生成目录:D:\rootproj\s
--次级J1
----mybuild.number
--次级J2
--build.gradle
--渐变属性
--设置。渐变
mybuild.number 格雷德尔酒店 格雷德尔先生 当我跑的时候 gradle-q:hello
或
gradle-q:hello
或
格拉德尔 从rootproj,我总是得到例如
从J1:24开始
生成目录:D:\rootproj\subboj2\build
从J1:25开始
生成目录:D:\rootproj\subboj2\build
一,。为什么这两个子项目总是执行两次,因此生成数量增加两次,而不是一次?
2.为什么即使我在命令行中明确指定了project:task,所有子项目都会执行?
我在网上搜索过,找不到有用的信息。
提前谢谢你的帮助 编辑: 将build.gradle更改为@JB Nizet建议的值:
allprojects {
repositories {
mavenLocal()
maven {url "http://repo1.maven.org/maven2"}
}
}
//subprojects {
def oldN = new File("E:/hqin/build/gradle/rootproj/subproj1/mybuild.number").text.split("=")[1]
def newN = (oldN.toInteger() + 1).toString()
project (':subproj1') {
task incr {
doLast{
ant.replace(
file: "mybuild.number",
token: "${oldN}",
value: "${newN}"
)
}
println "From subproj1 : ${newN}"
}
task hello(overwrite: true, dependsOn: 'incr'){
doLast{
println "hello from subproject 1"
}
}
}
project (':subproj2'){
task hello(overwrite: true){
doLast{
println "the build Dir: $buildDir"
println "hello from subproject 2"
}
}
}
//}
关于第二点:因为您的代码是作为项目配置的一部分运行的,无论执行什么任务,项目配置总是运行的。如果希望在执行任务时执行代码,则代码应位于任务定义的doLast闭包内:
task someTask {
doLast {
...
}
}
关于第一点:传递给
子项目的闭包将针对每个子项目执行。因此,对子项目1调用一次,然后配置子项目1和子项目2,然后对子项目2再次调用,然后重新配置子项目1和子项目2。你根本不应该有子项目
。太好了!我按照您的建议修改了build.gradle文件,它按预期工作。谢谢我有一个后续问题:当我运行gradle-q:subproj2:hello时,subproj1及其task incr仍然被执行。如何避免这种情况?是执行还是配置?println“From subproj1:${newN}”在配置阶段执行,而不是在执行阶段。它在配置阶段执行,但重要的是结果是相同的。我不希望在执行extecute时增加newN:subsubj2.hello。我可能会在rootproj中使用过滤器配置,但这似乎很不方便。它是在配置阶段执行的:这还不清楚。将始终配置该任务。因此,println是配置阶段的一部分,因为它不在doLast闭包中,它将始终被执行。但是doLast闭包本身不应该被执行。您是否注意到该文件已被修改?还是你只是在观察指纹?
allprojects {
repositories {
mavenLocal()
maven {url "http://repo1.maven.org/maven2"}
}
}
subprojects {
project (':subproj1') {
def oldN = new File("D:/rootproj/subproj1/mybuild.number").text.split("=")[1]
def newN = (oldN.toInteger() + 1).toString()
ant.replace(
file: "mybuild.number",
token: "${oldN}",
value: "${newN}"
)
println "From subproj1 : ${newN}"
task hello(overwrite: true){
doLast{
println "hello from subproject 1"
}
}
}
project (':subproj2'){
println "the build Dir: $buildDir"
task hello(overwrite: true){
doLast{
println "hello from subproject 2"
}
}
}
}
allprojects {
repositories {
mavenLocal()
maven {url "http://repo1.maven.org/maven2"}
}
}
//subprojects {
def oldN = new File("E:/hqin/build/gradle/rootproj/subproj1/mybuild.number").text.split("=")[1]
def newN = (oldN.toInteger() + 1).toString()
project (':subproj1') {
task incr {
doLast{
ant.replace(
file: "mybuild.number",
token: "${oldN}",
value: "${newN}"
)
}
println "From subproj1 : ${newN}"
}
task hello(overwrite: true, dependsOn: 'incr'){
doLast{
println "hello from subproject 1"
}
}
}
project (':subproj2'){
task hello(overwrite: true){
doLast{
println "the build Dir: $buildDir"
println "hello from subproject 2"
}
}
}
//}
task someTask {
doLast {
...
}
}