关于构建过程:Gradle插件任务排序

Gradle plugin task ordering

是)我有的?

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

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

  • 所以,当我执行gradle run时,它会执行main方法,一切都很完美。

    1
    2
    3
    4
    5
    6
    7
    C:\tmp\gradle-fun>gradle run
    :compileJava
    :processResources UP-TO-DATE
    :classes
    :run
    Hello MainApp !!
    BUILD SUCCESSFUL

    我想做的事?

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

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

    我试过了什么?

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

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

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    C:\tmp\gradle-fun>gradle run
    :clean
    :compileJava
    :processResources UP-TO-DATE
    :classes
    :run
    Hello MainApp !!
    :exec
    BUILD SUCCESSFUL

    我想知道什么?

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


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

    1
    task cleanRun(dependsOn: [clean, run])

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

    1
    2
    run.dependsOn 'clean'
    classes.mustRunAfter 'clean'

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

    希望这有助于=)


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

    1
    run.dependsOn 'cleanCompileJava'

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

    1
    classes.mustRunAfter 'cleanCompileJava'