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
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'