Gradle插件任务排序

Gradle插件任务排序,gradle,build-process,Gradle,Build Process,我有什么? 带有主类的Java源文件(MainApp) 渐变构建脚本 应用插件:“应用程序” mainClassName=“MainApp” sourceSets.main.java.srcDirs=['.] 所以,当我运行gradle时,它会执行main方法,并且一切都很完美 C:\tmp\gradle-fun>gradle run :compileJava :processResources UP-TO-DATE :classes :run Hello MainApp !! BUILD SU

我有什么?

  • 带有主类的Java源文件(MainApp)
  • 渐变构建脚本

    应用插件:“应用程序” mainClassName=“MainApp” sourceSets.main.java.srcDirs=['.]

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

    C:\tmp\gradle-fun>gradle run :compileJava :processResources UP-TO-DATE :classes :run Hello MainApp !! BUILD SUCCESSFUL 因此,当我运行
    gradleexec
    时,它会正常工作。然而,我觉得当你有额外的任务只是为了命令执行时,它的补丁就可以工作了

    C:\tmp\gradle-fun>gradle run :clean :compileJava :processResources UP-TO-DATE :classes :run Hello MainApp !! :exec BUILD SUCCESSFUL C:\tmp\gradle fun>gradle run :清洁 :compileJava :processResources是最新的 :班级 :运行 你好MainApp!! :exec 建设成功 我想知道什么?


    有没有什么方法可以避免编写包装器任务,并执行一些渐变魔术来达到要求?

    只要让
    运行
    任务,这取决于
    清理
    。这将确保在每次运行之前清理项目。如果您想更具体地描述您的用例,您可以简单地清理
    compileJava
    任务

    run.dependsOn 'cleanCompileJava'
    
    编辑:为避免在运行前删除类,请添加:

    classes.mustRunAfter 'cleanCompileJava'
    

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

    task cleanRun(dependsOn: [clean, run])
    
    或者,您可以按照Mark Vieira的回答更改接线:

    run.dependsOn 'clean'
    classes.mustRunAfter 'clean'
    
    第二行确保它不会清理已编译的类


    希望这有帮助=)

    事实上,我也尝试过同样的方法-但是在
    run
    之前调用了
    clean
    任务-它删除了构建目录(这很好),但删除了最近编译的类。因此将没有要运行的主类文件:(谢谢..它在没有任何补丁的情况下工作(意味着添加包装器任务)
    compileJava.mustRunAfter'clean'
    也有同样的功能。
    classes
    任务实际上只是
    compileJava
    processResources
    的集合。它只是确保两者都完成。
    classes
    指的是什么?Javac编译?@Igor确切地说,
    classes
    任务负责c编译所有Java文件并生成所有
    .class
    文件。这是否意味着我们可以像这样颠倒顺序:
    clean.mustRunAfter'classes'
    ?是的,好吧,但这意味着您将在构建完之后立即删除所有构建的内容。例如,我不知道您是否要求它构建一个jar文件—空的jar是通用的因为所有要添加的文件都被删除了,或者它会失败,或者它会再次构建类文件,所以我打赌是第一种情况。
    run.dependsOn 'clean'
    classes.mustRunAfter 'clean'