Gradle插件任务排序

Kun*_*nal 4 build-process gradle

是)我有的?

  1. 带有Main类的Java源文件(MainApp)
  2. gradle构建脚本

    apply plugin:'application'mainClassName ="MainApp"sourceSets.main.java.srcDirs = ['.'']

所以,当我这样做时gradle run,它会执行main方法,一切都很完美.

C:\tmp\gradle-fun>gradle run
:compileJava
:processResources UP-TO-DATE
:classes
:run
Hello MainApp !!
BUILD SUCCESSFUL

我想做的事?

现在我想知道在run任务执行之前清理构建目录的干净任务(常见构建任务).

这背后有理由,我想确保每次gradle都应该编译java文件,并且应该刷新所有.class文件(它的一些要求)

我试过了什么?

添加了一个包装器任务,它按顺序执行干净任务和运行任务.

apply plugin: 'application'
mainClassName = "MainApp"
sourceSets.main.java.srcDirs = ['.'] 
task exec(dependsOn: ['clean', 'run'])
Run Code Online (Sandbox Code Playgroud)

因此,当我跑步时gradle exec,它可以正常工作.但是,当你有额外的任务只是为了执行订单时,我觉得它的补丁工作.

C:\tmp\gradle-fun>gradle run
:clean
:compileJava
:processResources UP-TO-DATE
:classes
:run
Hello MainApp !!
:exec
BUILD SUCCESSFUL

我想知道什么?

有没有办法避免编写包装器任务并做一些Gradle魔法来达到要求?

Mar*_*ira 5

只是让run任务依赖clean.这将确保在每次运行之前清理您的项目.如果您想要更具体地了解您的用例,您只需清理compileJava任务即可.

run.dependsOn 'cleanCompileJava'
Run Code Online (Sandbox Code Playgroud)

编辑:为避免在运行之前删除您的类,请添加:

classes.mustRunAfter 'cleanCompileJava'
Run Code Online (Sandbox Code Playgroud)


Jan*_*lho 5

您可以使用cleanrun作为依赖项创建自己的任务:

task cleanRun(dependsOn: [clean, run])
Run Code Online (Sandbox Code Playgroud)

或者,您可以按照Mark Vieira的回答更改接线:

run.dependsOn 'clean'
classes.mustRunAfter 'clean'
Run Code Online (Sandbox Code Playgroud)

第二行确保它不会清理已编译的类.

希望这有助于=)