Gradle 运行多个任务的渐变自定义任务
我想将多个gradle任务作为一个运行。所以不是Gradle 运行多个任务的渐变自定义任务,gradle,Gradle,我想将多个gradle任务作为一个运行。所以不是 ./gradlew clean build publish 我想要一个自定义任务 ./gradlew cleanBuildPublish 按顺序执行cleanbuild和publish 怎么可能呢 这行不通 task cleanBuildPublish { dependsOn 'clean' dependsOn 'build' dependsOn 'publish' } 尝试以下方法使cleanBuildPublis
./gradlew clean build publish
我想要一个自定义任务
./gradlew cleanBuildPublish
按顺序执行clean
build
和publish
怎么可能呢
这行不通
task cleanBuildPublish {
dependsOn 'clean'
dependsOn 'build'
dependsOn 'publish'
}
尝试以下方法使cleanBuildPublish依赖于其他任务 格雷德尔先生
task clean{
println "lets clean"
}
task build {
println "lets build"
}
task publish {
println "lets publish"
}
task cleanBuildPublish{
println 'lets do all'
}
cleanBuildPublish.dependsOn clean
cleanBuildPublish.dependsOn build
cleanBuildPublish.dependsOn publish
输出
$ gradle cleanBuildPublish
lets clean
lets build
lets publish
lets do all
:build UP-TO-DATE
:clean UP-TO-DATE
:publish UP-TO-DATE
:cleanBuildPublish UP-TO-DATE
BUILD SUCCESSFUL
Total time: 2.738 secs
检查更多详细信息如果需要按预定义顺序执行某些任务,则不仅需要为该任务设置
dependsOn
,还需要设置mustRunAfter
属性,如以下代码所示:
task cleanBuildPublish {
dependsOn 'clean'
dependsOn 'build'
dependsOn 'publish'
tasks.findByName('build').mustRunAfter 'clean'
tasks.findByName('publish').mustRunAfter 'build'
}
dependsOn
没有定义任务执行的顺序,它只是使一个任务依赖于另一个任务,而必须在之后运行 如果发布任务位于名为subProjectName的子项目中
...
tasks.findByPath(':subProjectName:publish').mustRunAfter 'build'
...
尝试在build.gradle中添加defaultTasks
。例如。
defaultTasks'clean'、'build'、'publish'
您还可以使用名为
下面是如何使用GradleBuild
task cleanBuildPublish(type: GradleBuild) {
tasks = ['clean', 'build', 'publish']
}
我的方法是
task cleanBuildPublish (type: GradleBuild, dependsOn: ['clean', 'build', 'publish']) {
}
这对我来说很有用。下面是我如何使用Kotlin脚本,同时使用dependsOn和mustRunAfter实现的。下面是一个运行两个任务的示例,一个(自定义注册的“ImportionCodeFiles”任务)位于“此”项目中,另一个(预定义的“运行”任务)位于名为:unicode的同级项目中:
task cleanBuildPublish {
task _clean {
dependsOn 'clean'
}
task _build {
dependsOn '_clean'
dependsOn 'build'
}
dependsOn '_build'
dependsOn 'publish'
}
Gradle开发人员通常反对这种方法(他们说强制排序是不好的,从其他项目执行任务是不好的),并且正在研究一种在项目之间发布结果的方法;请参阅:获取它的一般方法如下:
task cleanBuildPublish {
def containedTasks = [clean, build, publish]
dependsOn containedTasks
placeTasksInOrder(containedTasks)
}
def placeTasksInOrder(List tasks) {
for (int i=0; i < tasks.size() -1; i++) {
def earlierTask = tasks.get(i)
def laterTask = tasks.get(i +1)
laterTask.mustRunAfter(earlierTask)
}
}
执行gradlew cleanBuildPublish somethingElse
时,可能会首先调用somethingElse
。
因此,最好使用mustRunAfter
配置。我的解决方案如下,它适合我
task cleanBuildPublish {
task _clean {
dependsOn 'clean'
}
task _build {
dependsOn '_clean'
dependsOn 'build'
}
dependsOn '_build'
dependsOn 'publish'
}
你在使用java插件吗?@SantoshGokak是的,我不使用。输出:Gradle任务请共享您的构建。Gradle文件项目:日历模块:发布。Gradle订单不保证。您还需要mustRunAfter
这样还可以单独执行任务吗?我又遇到了一个错误无法在null对象上调用方法mustRunAfter()
,您的cleanBuildPublish任务必须放在生成脚本中所有3个相关任务之后。请确保在定义所有单个任务之后放置cleanBuildPublish
。gradle任务似乎是自上而下阅读的。这解决了我在null对象上的无法调用方法mustRunAfter()的问题
重要的一点是,gradle没有等待任务完成,所以任务将按前面提到的顺序执行?kotlin版本?kotlin版本将非常类似。您只想使用project.tasks.register
创建任务,仅此而已。Gradle项目特别建议不要这样做:当心嵌套调用:运行gradlew cleanBuildPublish somethingElse
时,然后可以先运行somethingElse
,Gradle项目特别建议不要这样做:
task cleanBuildPublish {
task _clean {
dependsOn 'clean'
}
task _build {
dependsOn '_clean'
dependsOn 'build'
}
dependsOn '_build'
dependsOn 'publish'
}