Как использовать JMH с gradle?

Я хочу использовать JMH, инструмент OpenJDK microbenchmark, с ш . Тем не менее, Im получает NPE при компиляции. С другой стороны, JMH работает при использовании от maven.

Я не публикую никаких build.gradle as it is basic-применить плагин java и добавить зависимость от инструмента JHM (org.openjdk.jmh:jmh-core:0.2).

Я пробовал что написано здесь без успеха.

что еще я должен сделать? Я думаю, что-то с установкой агента, но Я все еще не понимал.

исключения:

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

2 ответов


в настоящее время вы можете просто использовать специальный плагин jmh-Gradle в плагин

Он требует минимальной конфигурации и позволяет запускать тесты JMH, а также создавать артефакт тестов


мой плохой, я пытался сравнить метод, который имеет аргумент-конечно, JMH не будет знать, что передать :) однажды, когда я создал метод void без аргументов, все сработало.

мой build.gradle:

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:

gw clean build

а затем запустите их с помощью:

java -jar build/libs/microbenchmarks.jar ".*" -wi 2 -i 10 -f 2 -t 16

обновление

из последних версий JMH вам также нужно будет добавить зависимость от:

org.openjdk.jmh:jmh-generator-annprocess:0.5.4

и вы можете использовать тени 0.8.