扩展现有Gradle任务并覆盖配置
我想定义一个名为扩展现有Gradle任务并覆盖配置,gradle,dropwizard,Gradle,Dropwizard,我想定义一个名为dbStatus的新任务,该任务调用(或扩展?run),只覆盖args属性 apply plugin: 'application' run { args "server", "service.yml" } task(dbStatus, type: run) { args "db", "status", "service.yml } 这不起作用,因为“run”不是有效的任务类。是否有一种快速的方法来扩展任务并重写属性 更新:决议 不幸的是,我不得不定义一个全
dbStatus
的新任务,该任务调用(或扩展?run
),只覆盖args
属性
apply plugin: 'application'
run {
args "server", "service.yml"
}
task(dbStatus, type: run) {
args "db", "status", "service.yml
}
这不起作用,因为“run”
不是有效的任务类。是否有一种快速的方法来扩展任务并重写属性
更新:决议
不幸的是,我不得不定义一个全新的JavaExec
任务,并重新创建run
配置要执行的逻辑。以下是我的想法:
task(dbStatus, type: JavaExec) {
main mainClassName
classpath sourceSets.main.runtimeClasspath
args "db", "status", "service.yml"
}
我不认为这与
run
完全相同,因为它不是针对构建jar
运行的,我不相信,但它对我来说是有效的。任务不能以这种方式“扩展”。相反,请声明另一个任务并根据需要对其进行配置。(通常一次配置多个任务以避免代码重复。)因此现有的运行
任务看起来是JavaExec
任务类型(由应用程序
插件提供),因此,我只需要重新创建它正在执行的逻辑?您需要声明另一个类型为JavaExec
的任务,并根据需要对其进行配置(至少main
和args
)。请参见.Updated问题中的JavaExec
,并附上我的解答。如果你看到任何更好的,请告诉我。我更喜欢使用dependsOn:shadowJar
,并对构建的jar运行java-jar
命令,但我对gradle不够熟悉,无法理解如何检索不同任务正在使用的所有变量(例如,对构建jar的引用、构建dir等)。感谢您的帮助上面的dbStatus
配置正是应用程序
插件预配置的运行
。如果shadowJar
类型为Jar
,则可以将classpath sourceset.main.runtimeClasspath
更改为classpath shadowJar
(它是classpath shadowJar.outputs.files的缩写)。这还将添加推断的任务依赖项,因此不需要显式依赖项。目前,JavaExec
需要一个显式的主类名;没有等价于java-jar
。