/* * SPDX-License-Identifier: Apache-2.0 * * The OpenSearch Contributors require contributions made to * this file be licensed under the Apache-2.0 license or a * compatible open source license. * * Modifications Copyright OpenSearch Contributors. See * GitHub history for details. */ /* * 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. */ import org.opensearch.gradle.info.BuildParams apply plugin: 'opensearch.build' apply plugin: 'application' mainClassName = 'org.openjdk.jmh.Main' assemble.enabled = false archivesBaseName = 'opensearch-benchmarks' test.enabled = false dependencies { api( project(":server")) { // 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' } api "org.openjdk.jmh:jmh-core:$versions.jmh" annotationProcessor "org.openjdk.jmh:jmh-generator-annprocess:$versions.jmh" // Dependencies of JMH runtimeOnly 'net.sf.jopt-simple:jopt-simple:4.6' runtimeOnly 'org.apache.commons:commons-math3:3.2' } // 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"]) run.executable = "${BuildParams.runtimeJavaHome}/bin/java" // classes generated by JMH can use all sorts of forbidden APIs but we have no influence at all and cannot exclude these classes disableTasks('forbiddenApisMain') // No licenses for our benchmark deps (we don't ship benchmarks) tasks.named("dependencyLicenses").configure { it.enabled = false } dependenciesInfo.enabled = false thirdPartyAudit.ignoreViolations( // 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' ) spotless { java { // IDEs can sometimes run annotation processors that leave files in // here, causing Spotless to complain. Even though this path ought not // to exist, exclude it anyway in order to avoid spurious failures. targetExclude 'src/main/generated/**/*.java' } }