如何与gradle一起使用JMH?

伊格

我想将JMH(一个OpenJDK微基准工具)与gradle一起使用但是,我正在编译时得到NPE。另一方面,从maven使用时,JMH可以工作。

我没有发布任何内容,build.gradle因为它很基本-应用Java插件并添加对JHM工具的依赖(org.openjdk.jmh:jmh-core:0.2)。

我尝试了这里写的内容但没有成功。

我还要做什么?我认为设置代理会有所帮助,但我仍然没有弄清楚。

例外:

:compileJava
java.lang.NullPointerException
at org.openjdk.jmh.processor.internal.GenerateMicroBenchmarkProcessor.validMethodSignature(GenerateMicroBenchmarkProcessor.java:502)
鲍巴

刚完成我的“杰作”。没有uber-jars,没有插件,代码库与main&test分开,基准测试编译链接到main,但是在主流生命周期中不会自动运行。简单,明确且易于破解的香草gradle。

我直接从IntelliJ运行它,要在一个盒子上运行,您可能需要uber-jar back :-)

在进行此操作之前,我花了很多时间尝试使该插件正常工作,但是就我的口味而言,它太笨拙了。

下面是分步细分。

定义一个sourceSet名为jmhclasspath的新方法,该方法与主方法挂钩sourceSet

sourceSets {
    jmh {
        java.srcDirs = ['src/jmh/java']
        scala.srcDirs = ['src/jmh/scala']
        resources.srcDirs = ['src/jmh/resources']
        compileClasspath += sourceSets.main.runtimeClasspath
    }
}

为其定义依赖项(至少JMH及其注释处理器)。

dependencies {
    ...
    jmhImplementation 'org.openjdk.jmh:jmh-core:1.21'
    jmhImplementation 'org.openjdk.jmh:jmh-generator-annprocess:1.21'
}

定义任务jmh类型JavaExec

task jmh(type: JavaExec, dependsOn: jmhClasses) {
    main = 'org.openjdk.jmh.Main'
    classpath = sourceSets.jmh.compileClasspath + sourceSets.jmh.runtimeClasspath
}

钩子jmhClasses任务运行,classes以确保基准测试与其余代码一起编译

classes.finalizedBy(jmhClasses)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章