扩展现有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