123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- /*
- * 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:2.0.4'
- }
- }
- apply plugin: 'elasticsearch.build'
- // order of this seciont matters, see: https://github.com/johnrengelman/shadow/issues/336
- apply plugin: 'application' // have the shadow plugin provide the runShadow task
- mainClassName = 'org.openjdk.jmh.Main'
- apply plugin: 'com.github.johnrengelman.shadow' // build an uberjar with all benchmarks
- // Not published so no need to assemble
- tasks.remove(assemble)
- build.dependsOn.remove('assemble')
- archivesBaseName = 'elasticsearch-benchmarks'
- test.enabled = false
- 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"])
- 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
- dependenciesInfo.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'
- }
- runShadow {
- executable = new File(project.runtimeJavaHome, 'bin/java')
- }
- // 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'
- )
|