首页 文章

Gradle插件任务排序

提问于
浏览
4

What I have?

  • 带有Main类的Java源文件(MainApp)

  • 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

What I want to do?

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

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

What I have tried?

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

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

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

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

What I would like to know?

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

2 回答

  • 5

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

    run.dependsOn 'cleanCompileJava'
    

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

    classes.mustRunAfter 'cleanCompileJava'
    
  • 5

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

    task cleanRun(dependsOn: [clean, run])
    

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

    run.dependsOn 'clean'
    classes.mustRunAfter 'clean'
    

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

    希望这有助于=)

相关问题