/* * Licensed to Elasticsearch under one or more contributor * license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright * ownership. Elasticsearch licenses this file to you under * the Apache License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ buildscript { repositories { maven { url 'https://plugins.gradle.org/m2/' } } dependencies { classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.4' } } apply plugin: 'elasticsearch.build' // build an uberjar with all benchmarks apply plugin: 'com.github.johnrengelman.shadow' // have the shadow plugin provide the runShadow task apply plugin: 'application' archivesBaseName = 'elasticsearch-benchmarks' mainClassName = 'org.openjdk.jmh.Main' // never try to invoke tests on the benchmark project - there aren't any check.dependsOn.remove(test) // explicitly override the test task too in case somebody invokes 'gradle test' so it won't trip task test(type: Test, overwrite: true) dependencies { compile("org.elasticsearch:elasticsearch:${version}") { // JMH ships with the conflicting version 4.6. This prevents us from using jopt-simple in benchmarks (which should be ok) but allows // us to invoke the JMH uberjar as usual. exclude group: 'net.sf.jopt-simple', module: 'jopt-simple' } compile "org.openjdk.jmh:jmh-core:$versions.jmh" compile "org.openjdk.jmh:jmh-generator-annprocess:$versions.jmh" // Dependencies of JMH runtime 'net.sf.jopt-simple:jopt-simple:4.6' runtime 'org.apache.commons:commons-math3:3.2' } compileJava.options.compilerArgs << "-Xlint:-cast,-deprecation,-rawtypes,-try,-unchecked,-processing" // enable the JMH's BenchmarkProcessor to generate the final benchmark classes // needs to be added separately otherwise Gradle will quote it and javac will fail compileJava.options.compilerArgs.addAll(["-processor", "org.openjdk.jmh.generators.BenchmarkProcessor"]) compileTestJava.options.compilerArgs << "-Xlint:-cast,-deprecation,-rawtypes,-try,-unchecked" forbiddenApis { // classes generated by JMH can use all sorts of forbidden APIs but we have no influence at all and cannot exclude these classes ignoreFailures = true } // No licenses for our benchmark deps (we don't ship benchmarks) dependencyLicenses.enabled = false thirdPartyAudit.excludes = [ // these classes intentionally use JDK internal API (and this is ok since the project is maintained by Oracle employees) 'org.openjdk.jmh.profile.AbstractHotspotProfiler', 'org.openjdk.jmh.profile.HotspotThreadProfiler', 'org.openjdk.jmh.profile.HotspotClassloadingProfiler', 'org.openjdk.jmh.profile.HotspotCompilationProfiler', 'org.openjdk.jmh.profile.HotspotMemoryProfiler', 'org.openjdk.jmh.profile.HotspotRuntimeProfiler', 'org.openjdk.jmh.util.Utils' ] shadowJar { classifier = 'benchmarks' } // alias the shadowJar and runShadow tasks to abstract from the concrete plugin that we are using and provide a more consistent interface task jmhJar( dependsOn: shadowJar, description: 'Generates an uberjar with the microbenchmarks and all dependencies', group: 'Benchmark' ) task jmh( dependsOn: runShadow, description: 'Runs all microbenchmarks', group: 'Benchmark' )