java - 如何在 gradle 构建中有许多任务配置?

标签 java gradle build jmh

我目前正在使用插件在 Java 代码上运行基准测试,我使用了 jmh-gradle-plugin要做到这一点。
该插件允许使用 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=<format> ,但我找不到“复制”任务并为每个变体提供不同配置的方法。
Gradle documentation has a page关于配置任务,但是他们配置了Copy任务。我想我可以遵循类似的方法并写:
task myJMH(type: me.champeau.gradle.JMHTask) {
    resultFormat="JSON"
}
但是方法不起作用,正如我在 this issue 中提到的那样.我认为这可能是 JMH 的任务不同。注册一个具有该名称的类是可行的,但无法配置它。我收到以下错误:
Could not set unknown property 'include' for task ':myJMH' of type me.champeau.gradle.JMHTask.
同样,我想要 shadowJar 的各种配置任务,能够生成任务的几个不同变体,但我遇到了同样的问题。

最佳答案

jmh在您的第一个示例中,它不是任务,而是扩展。该插件注册了一个扩展名和一个同名的任务。实际上,这是 Gradle 插件的流行模式。
通常,即使插件创建的任务可以使用扩展配置,仍然可以直接配置它们,因为它们仍然提供配置属性。任务类型 ShadowJar 就是这种情况。 , 所以你可以 simply create tasks of that type manually :

// Shadowing Test Sources and Dependencies
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar

task testJar(type: ShadowJar) {
    classifier = 'tests'
    from sourceSets.test.output
    configurations = [project.configurations.testRuntime]
}

可悲的是,任务类型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'
}
请注意,一个任务只能在构建中执行一次,因此如果您想在同一运行中运行不同的配置,此解决方法将不起作用。

关于java - 如何在 gradle 构建中有许多任务配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63379024/

相关文章:

c++ - 设置 C/C++ 构建配置在点击确定后恢复为默认值

ios - 模拟器和真实环境中的 Xcode 构建错误 "Command/usr/bin/codesign failed with exit code 1"

Java 音频节拍器 |时间和速度问题

java - spring中@ModelAttribute、model.addAttribute有什么区别?

java - 使用 Java 6 的嵌入式 http 服务器进行 IPC

java - gradle 5 - windows java.io.IOException : CreateProcess error=206, 文件名太长

Gradle - FXMLoader 找不到资源

java - 如何在Android Studio中使用javax.xml.transform.stax?

c++ - 扭矩 3D 建筑模板项目产生 "nfd.h file not found"错误是 VS2013

java - Jenkins 种子作业(没有这样的文件或目录)