Gradle插件任务排序

时间:2015-01-16 17:48:47

标签: gradle build-process

我有什么?

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

    申请插件:'申请' mainClassName =“MainApp” sourceSets.main.java.srcDirs = ['。']

  3. 因此当我执行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'])
    

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

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

    我想知道什么?

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

2 个答案:

答案 0 :(得分:5)

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

run.dependsOn 'cleanCompileJava'

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

classes.mustRunAfter 'cleanCompileJava'

答案 1 :(得分:5)

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

task cleanRun(dependsOn: [clean, run])

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

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

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

希望这有助于=)