gpt4 book ai didi

Gradle 的 mustRunAfter/finalizedBy 仅用于特定任务?

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

我正在尝试获取 Gradle 的 mustRunAfterfinalizedBy只为特定任务工作。以这个例子build.gradle :

task removeTestDatabaseContainer {
doLast {
println '\ninside removeTestDatabaseContainer\n'
}
}

task startTestDatabaseContainer {
doLast {
println '\ninside startTestDatabaseContainer\n'
}
finalizedBy removeTestDatabaseContainer
}

task flywayMigrate { t->
doLast {
println '\n inside flywayMigrate\n'
}
}

task flywayClean { t->
doLast {
println '\n inside flywayClean\n'
}
}

task testEverything {
dependsOn startTestDatabaseContainer
dependsOn flywayMigrate
dependsOn flywayClean

flywayMigrate.mustRunAfter startTestDatabaseContainer
flywayMigrate.finalizedBy flywayClean

flywayClean.mustRunAfter flywayMigrate
flywayClean.finalizedBy removeTestDatabaseContainer
}

我很满意 testEverything作品。我想要从该任务中获得的输出:
➜  gradle testEverything
Parallel execution is an incubating feature.
:startTestDatabaseContainer

inside startTestDatabaseContainer

:flywayMigrate

inside flywayMigrate

:flywayClean

inside flywayClean

:removeTestDatabaseContainer

inside removeTestDatabaseContainer

:testEverything

BUILD SUCCESSFUL

Total time: 0.597 secs

但是,当我只运行 flywayMigrate 时我遇到了意想不到的问题。这是输出:
➜  gradle flywayMigrate                
Parallel execution is an incubating feature.
:flywayMigrate

inside flywayMigrate

:flywayClean

inside flywayClean

:removeTestDatabaseContainer

inside removeTestDatabaseContainer


BUILD SUCCESSFUL

Total time: 0.605 secs

这不是我想要的输出。我只想要 flywayMigrate运行。 问题 1) 我该如何制作 testEverything照常工作,同时拥有 gradle flywayMigrate仅调用 flywayMigrate -任务?

问题 2)
有人告诉我,这与 task testEverything {} 括号内的所有内容有关。是配置,始终由 Gradle 处理。所以任何 mustRunAfter/ finalizedBy我在一个任务内设置将具有“全局效果”。但在那种情况下,为什么不 gradle flywayMigrate调用 startTestDatabaseContainer ? (因为 flywayMigrate.mustRunAfter startTestDatabaseContainer 任务中的行 testEverything。)

编辑:我被定向到 Ordering tasksFinalizer tasks在 Gradle 文档中,他们回答了问题 2: mustRunAfter仅当两个任务都运行时才生效。 finalizedBy另一方面,只有在运行它设置的任务时才会生效。这就是为什么 flywayCleanremoveTestDatabasContainer当我执行 gradle flywayMigrate 时运行.

我仍在努力制作 gradle testEverything像上面一样工作,同时得到 gradle flywayMigrate只需执行 flywayMigrate .

最佳答案

感谢 eskatos 在 Freenode 上 #gradle 的帮助,我找到了一个解决方案。这只是为了删除我拥有的 finalizedBy-lines。更新的 build.gradle 有效:

task removeTestDatabaseContainer {
doLast {
println '\ninside removeTestDatabaseContainer\n'
}
}

task startTestDatabaseContainer {
doLast {
println '\ninside startTestDatabaseContainer\n'
}
finalizedBy removeTestDatabaseContainer
}

task flywayMigrate { t->
doLast {
println '\n inside flywayMigrate\n'
}
}

task flywayClean { t->
doLast {
println '\n inside flywayClean\n'
}
}

task testEverything {
dependsOn startTestDatabaseContainer
dependsOn flywayMigrate
dependsOn flywayClean

flywayMigrate.mustRunAfter startTestDatabaseContainer
//flywayMigrate.finalizedBy flywayClean

flywayClean.mustRunAfter flywayMigrate
//flywayClean.finalizedBy removeTestDatabaseContainer
}

关于Gradle 的 mustRunAfter/finalizedBy 仅用于特定任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46400284/

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