我想将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
名为jmh
classpath的新方法,该方法与主方法挂钩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] 删除。
我来说两句