我有什么?
gradle构建脚本
申请插件:'申请' 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
我想做什么?
现在我想知道在执行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魔法来达到要求?
答案 0 :(得分:5)
让run
任务取决于clean
。这将确保在每次运行之前清理您的项目。如果您想要更具体地了解您的用例,您只需清理compileJava
任务。
run.dependsOn 'cleanCompileJava'
编辑:为避免在运行之前删除您的课程,请添加:
classes.mustRunAfter 'cleanCompileJava'
答案 1 :(得分:5)
您可以创建自己的任务,clean
和run
作为依赖项:
task cleanRun(dependsOn: [clean, run])
或者,您可以按照Mark Vieira的回答更改接线:
run.dependsOn 'clean'
classes.mustRunAfter 'clean'
第二行确保它不会清理已编译的类。
希望这有助于=)