Java 如何在gradle构建中拥有多个任务配置?
我目前正在使用一个插件在Java代码上运行基准测试,我曾经这样做过 该插件允许使用Java 如何在gradle构建中拥有多个任务配置?,java,gradle,build,jmh,Java,Gradle,Build,Jmh,我目前正在使用一个插件在Java代码上运行基准测试,我曾经这样做过 该插件允许使用JMH代码块方便地描述JMH配置: jmh { include = ["List"] benchmarkParameters=["seed": ["1", "2", "3", "4", "5"], "applicationSize&qu
JMH
代码块方便地描述JMH配置:
jmh {
include = ["List"]
benchmarkParameters=["seed": ["1", "2", "3", "4", "5"],
"applicationSize":["100", "1000"],
"baseStructureSize":["100", "1000"]]
fork=2
timeOnIteration="250ms"
iterations=2
warmup="250ms"
warmupIterations=2
fork=2
resultFormat="CSV"
benchmarkMode=["ss"]
timeUnit="ms"
failOnError = true
}
这很有用,但我希望有不同类型的相同任务,例如,一个输出是CSV,一个输出是JSON。我知道这可以通过resultFormat=
进行配置,但是我找不到一种方法来“复制”任务,并且对每个变量都有不同的配置
有关配置任务,但它们配置了Copy
任务。我想我也可以用类似的方法写:
task myJMH(type: me.champeau.gradle.JMHTask) {
resultFormat="JSON"
}
但正如我在文章中提到的,这种方法不起作用。我想可能是JMH的任务不同。注册该名称的类是可行的,但无法对其进行配置。我得到以下错误:
Could not set unknown property 'include' for task ':myJMH' of type me.champeau.gradle.JMHTask.
类似地,我希望拥有
shadowJar任务的各种配置,以便能够生成任务的几种不同变体,但我遇到了相同的问题。第一个示例中的jmh
不是任务,而是扩展。该插件使用相同的名称注册扩展和任务。实际上,这是Gradle插件的一种流行模式
通常,即使插件创建的任务可以使用扩展配置,也可以直接配置它们,因为它们仍然提供配置属性。任务类型为ShadowJar
,因此您可以:
遗憾的是,任务类型JMHTask
的实现方式只是从扩展中检索配置,因此任何实例都将使用相同的配置
但是,您可以尝试以下解决方法:
创建配置扩展的任务,然后将它们与jmh
任务关联起来执行:
jmh {
include = ["List"]
benchmarkParameters=["seed": ["1", "2", "3", "4", "5"],
"applicationSize":["100", "1000"],
"baseStructureSize":["100", "1000"]]
fork=2
timeOnIteration="250ms"
iterations=2
warmup="250ms"
warmupIterations=2
fork=2
benchmarkMode=["ss"]
timeUnit="ms"
failOnError = true
}
task jmhCsv {
doFirst {
jmh.resultFormat="CSV"
}
finalizedBy 'jmh'
}
task jmhJson {
doFirst {
jmh.resultFormat="JSON"
}
finalizedBy 'jmh'
}
请注意,一个任务在生成中只能执行一次,因此,如果您希望在同一次运行中运行不同的配置,则此解决方案将不起作用。第一个示例中的jmh
不是一个任务,而是一个扩展。该插件使用相同的名称注册扩展和任务。实际上,这是Gradle插件的一种流行模式
通常,即使插件创建的任务可以使用扩展配置,也可以直接配置它们,因为它们仍然提供配置属性。任务类型为ShadowJar
,因此您可以:
遗憾的是,任务类型JMHTask
的实现方式只是从扩展中检索配置,因此任何实例都将使用相同的配置
但是,您可以尝试以下解决方法:
创建配置扩展的任务,然后将它们与jmh
任务关联起来执行:
jmh {
include = ["List"]
benchmarkParameters=["seed": ["1", "2", "3", "4", "5"],
"applicationSize":["100", "1000"],
"baseStructureSize":["100", "1000"]]
fork=2
timeOnIteration="250ms"
iterations=2
warmup="250ms"
warmupIterations=2
fork=2
benchmarkMode=["ss"]
timeUnit="ms"
failOnError = true
}
task jmhCsv {
doFirst {
jmh.resultFormat="CSV"
}
finalizedBy 'jmh'
}
task jmhJson {
doFirst {
jmh.resultFormat="JSON"
}
finalizedBy 'jmh'
}
请注意,一个任务在生成中只能执行一次,因此,如果您希望在同一次运行中运行不同的配置,则此解决方案将不起作用