首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用JMH与gradle?

如何使用JMH与gradle?
EN

Stack Overflow用户
提问于 2013-12-07 16:59:22
回答 5查看 17.3K关注 0票数 28

我想使用JMH ( OpenJDK微基准测试工具)和gradle。然而,我在编译上得到了NPE。另一方面,JMH在使用from maven时起作用。

我不会发布任何build.gradle,因为它是基本的-应用java插件并添加对JHM工具(org.openjdk.jmh:jmh-core:0.2)的依赖。

我试过写这里的东西,但没有成功。

我还能做什么?我想找个经纪人做点什么,但我还是想不出来。

例外:

代码语言:javascript
复制
:compileJava
java.lang.NullPointerException
at org.openjdk.jmh.processor.internal.GenerateMicroBenchmarkProcessor.validMethodSignature(GenerateMicroBenchmarkProcessor.java:502)
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-12-21 18:41:38

刚完成我的"名著“。没有uber-jar,没有插件,与main & test分离的代码库,连接到main的基准编译,但是在主流生命周期中不会自动运行。简单,明确,和可攻击,香草级。

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

在此之前,我花了相当多的时间来尝试做那个插件,但是它太笨重了,不适合我的口味。

下面一步一步地分解。

sourceSet 定义了一个名为 jmh 的新的类路径,该路径与主 sourceSet的类路径挂钩。

代码语言:javascript
复制
sourceSets {
    jmh {
        java.srcDirs = ['src/jmh/java']
        scala.srcDirs = ['src/jmh/scala']
        resources.srcDirs = ['src/jmh/resources']
        compileClasspath += sourceSets.main.runtimeClasspath
    }
}

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

代码语言:javascript
复制
dependencies {
    ...
    jmhImplementation 'org.openjdk.jmh:jmh-core:1.35'
    jmhImplementation 'org.openjdk.jmh:jmh-generator-annprocess:1.35'
}

定义类型为jmh JavaExec的任务

代码语言:javascript
复制
task jmh(type: JavaExec, dependsOn: jmhClasses) {
    main = 'org.openjdk.jmh.Main'
    classpath = sourceSets.jmh.compileClasspath + sourceSets.jmh.runtimeClasspath
}

jmhClasses classes 之后运行Hook 任务,以确保基准测试与代码的其余部分一起编译

代码语言:javascript
复制
classes.finalizedBy(jmhClasses)
票数 32
EN

Stack Overflow用户

发布于 2014-07-16 23:26:26

目前,您可以只使用专用插件插件

它需要最少的配置,允许您运行JMH基准测试以及构建基准测试工件。

票数 25
EN

Stack Overflow用户

发布于 2013-12-07 17:54:46

我的缺点是,我试图对一个有争议的方法进行基准测试--当然JMH将不知道该传递什么:)有一次,当我创建一个没有参数的void方法时,所有东西都正常工作。

我的build.gradle

代码语言:javascript
复制
defaultTasks 'build'

apply plugin: 'java'
apply plugin: 'shadow'

buildscript {
    repositories {
        mavenCentral()
        maven {
            name 'Shadow'
            url 'http://dl.bintray.com/content/johnrengelman/gradle-plugins'
        }
    }
    dependencies {
        classpath 'org.gradle.plugins:shadow:0.7.4'
    }
}

jar {
    manifest {
        attributes 'Main-Class': 'org.openjdk.jmh.Main'
    }
}

repositories {
    mavenCentral()
}


build.doLast {
    tasks.shadow.execute()
}

shadow {
    outputFile = new File('build/libs/microbenchmarks.jar')
}

ext {
    lib = [
        ... other dependencies...
        jmh:            'org.openjdk.jmh:jmh-core:0.2'
    ]
}

dependencies {
    compile lib... other dependencies...
    compile lib.jmh
}

sourceCompatibility = 1.7

构建测试和jar:

代码语言:javascript
复制
gw clean build

然后用:

代码语言:javascript
复制
java -jar build/libs/microbenchmarks.jar ".*" -wi 2 -i 10 -f 2 -t 16

更新

从最新版本的JMH中,还需要将依赖项添加到:

代码语言:javascript
复制
org.openjdk.jmh:jmh-generator-annprocess:0.5.4

你可以使用阴影0.8。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20443997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档