gpt4 book ai didi

gradle - 如何在Gradle Ant任务中重构通用代码?

转载 作者:行者123 更新时间:2023-12-03 06:09:09 27 4
gpt4 key购买 nike

我有以下Gradle代码:

ant.jdiff(destdir: outputDir) {
old(name: "platform-${oldVersion}") {
oldVersionRoot.eachDirMatch({ dir ->
new File("${dir}/src").exists()
}) { dir ->
dirset(dir: "${dir}/src")
}
}

'new'(name: "platform-${currentVersion}") {
currentVersionRoot.eachDirMatch({ dir ->
new File("${dir}/src").exists()
}) { dir ->
dirset(dir: "${dir}/src")
}
}
}

我试过了:
final getSrcDirSets = { root ->
final result = []

root.eachDirMatch({ dir ->
new File("${dir}/src").exists()
}) { dir ->
result.append(dirset(dir: "${dir}/src"))
}

result
}

ant.jdiff(destdir: outputDir) {
old(name: "example-${oldVersion}") {
getSrcDirSets(oldVersionRoot)
}

'new'(name: "example-${currentVersion}") {
getSrcDirSets(currentVersionRoot)
}
}

但这会导致以下错误:
Caused by: org.gradle.api.internal.MissingMethodException: Could not find method old() for arguments [{name=example-1.2.3}, build_at5jtticxum4wmuh64edt9rhd$_run_closure6$_closure26$_closure28$_closure29@26f75d38] on task ':jdiff'.

如何将通用代码重构为单独的函数?

最佳答案

一种方法虽然不是理想的,因为DefaultAntBuilder的所有实例都会受到影响,但它是通过Groovy monkeypatching进行的:

ant.metaClass.jDiff_getSrcDirSets = { root ->
root.eachDirMatch({ dir ->
new File("${dir}/src").exists()
}) { dir ->
dirset(dir: "${dir}/src")
}
}

ant.property(name: "JDIFF_HOME", value: jdiffHome)
ant.jdiff(
destdir: outputDir,
verbose: 'off',
stats: 'on',
docchanges: 'off',
source: '1.8') {
old(name: "${project.name}-${oldVersion}") {
jDiff_getSrcDirSets(oldVersionRoot)
}

'new'(name: "${project.name}-${currentVersion}") {
jDiff_getSrcDirSets(currentVersionRoot)
}
}

关于gradle - 如何在Gradle Ant任务中重构通用代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36167818/

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