gpt4 book ai didi

gradle - 如何使用Gradle 5和GradleBuild任务修复错误 'Cannot lock buildSrc build lock as it has already been locked by this process.'

转载 作者:行者123 更新时间:2023-12-03 03:56:36 30 4
gpt4 key购买 nike

我们有一个gradle构建,它可以动态创建GradleBuild类型的多个任务,以与不同的客户端库版本一起运行以测试其兼容性。在Gradle4上可以正常工作,但是在移至Gradle5后,执行第一项任务后出现Cannot lock buildSrc build lock as it has already been locked by this process.错误。因此,目录是由首次构建锁定的,因此不会释放。您能否建议如何解决此问题?
就是这样

task testAll {
dependsOn clientVersions.collect { "runTestsWithClient$it" }
clientVersions.forEach { version ->
task "runTestsWithClient$version"(type: GradleBuild) {
buildFile = "build.gradle"
tasks = ["testClient"]
startParameter.projectProperties = [clientVersion: version]
}
}
}

最佳答案

我建议不要在单独的GradleBuild任务中运行这些测试。我宁愿尝试从共享任务模板为每个测试设置本地Test任务;这些Test任务将仅在测试类路径中有所不同。

为了确保不同的客户端版本依赖性不会受到干扰,我将为每个客户端版本分别生成单独的配置,然后在其中添加依赖性。

这是应该与Gradle 5.6.1(可能更早)配合使用的基本示例:

plugins {
id 'java'
}

repositories {
ivy {
url = 'file:///tmp/my-repo'
}
jcenter()
}

dependencies {
testImplementation 'junit:junit:4.12'
}

def clientVersions = [1, 2, 3]

task('testAll')

clientVersions.each { v ->
def configName = "myConfig$v"
def config = configurations.create(configName)
dependencies.add(configName, "com.example:foo:$v")

def taskName = "testClient$v"
task(taskName, type: Test) {
classpath += config
// TODO use other shared test configuration such as:
// filter { includeTestsMatching "*.ClientCompatibilityTest" }
}
testAll.dependsOn taskName
}

如果您对此有任何疑问,请告诉我。

关于gradle - 如何使用Gradle 5和GradleBuild任务修复错误 'Cannot lock buildSrc build lock as it has already been locked by this process.',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57695267/

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