gpt4 book ai didi

Gradle 项目,子项目重复执行

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

我有一个带有子项目的项目。布局:

rootproj
--subproj1
----mybuild.number
--subproj2
--build.gradle
--gradle.properties
--settings.gradle



mybuild.number
#Build Number for ANT. Do not edit!
#Wed Nov 210 2121:210:2121 PST 2102121
build.number=1

设置.gradle
include ('subproj1', 'subproj2')

构建.gradle
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"
}
}

}
}

当我运行时

gradle -q subproj1:hello



或者

gradle -q subproj2:hello



或者

gradle



从rootproj,我总是得到例如

....
From subproj1 : 24
the build Dir: D:\rootproj\subproj2\build
From subproj1 : 25
the build Dir: D:\rootproj\subproj2\build



1. 为什么两个子项目总是执行两次,所以build号增加了两次,而不是一次?

2. 为什么我在命令行中明确指定了project:task,所有子项目都被执行了?
我在互联网上搜索过,找不到有用的信息。
提前感谢您的帮助。

编辑:
按照@JB Nizet 的建议更改 build.gradle:

  1. move the ant.replace to task incr
  2. comment out subprojects


它完全按照我的预期工作。
    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 {
...
}
}

关于第一点:关闭传递给 subprojects为每个子项目执行。所以,对子项目1调用一次,配置子项目1和子项目2,然后对子项目2再次调用,重新配置子项目1和子项目2。你不应该有 subprojects一点也不。

关于Gradle 项目,子项目重复执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40942196/

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