From a148263597e61d325355f10368e2f8e75cabcce2 Mon Sep 17 00:00:00 2001 From: Bogdan Drutu Date: Fri, 21 Feb 2020 10:19:51 -0800 Subject: [PATCH] Switch to use pluginManagement, Use gradle plugin for jmh. (#903) * Switch to use pluginManagement, Use gradle plugin for jmh. Signed-off-by: Bogdan Cristian Drutu * Fix jmh report Signed-off-by: Bogdan Cristian Drutu * Use ' for the moment for plugin ids in main gradle --- all/build.gradle | 5 + api/build.gradle | 9 ++ build.gradle | 84 +++++++------ context_prop/build.gradle | 7 ++ contrib/runtime_metrics/build.gradle | 7 ++ contrib/trace_utils/build.gradle | 7 ++ exporters/inmemory/build.gradle | 10 ++ exporters/jaeger/build.gradle | 19 ++- exporters/logging/build.gradle | 13 ++- exporters/otprotocol/build.gradle | 7 ++ jmh.gradle | 143 ----------------------- opentracing_shim/build.gradle | 8 +- proto/build.gradle | 19 ++- sdk/build.gradle | 9 ++ sdk_contrib/async_processor/build.gradle | 7 ++ sdk_contrib/auto_config/build.gradle | 7 ++ sdk_contrib/aws_v1_support/build.gradle | 7 ++ sdk_contrib/testbed/build.gradle | 7 ++ settings.gradle | 20 +++- 19 files changed, 184 insertions(+), 211 deletions(-) delete mode 100644 jmh.gradle diff --git a/all/build.gradle b/all/build.gradle index 931e8a5142..97ac4fab36 100644 --- a/all/build.gradle +++ b/all/build.gradle @@ -1,3 +1,8 @@ +plugins { + id "java" + id "ru.vyarus.animalsniffer" +} + description = "OpenTelemetry All" ext.moduleName = "io.opentelemetry.all" diff --git a/api/build.gradle b/api/build.gradle index 6392725848..fd717fbdda 100644 --- a/api/build.gradle +++ b/api/build.gradle @@ -1,3 +1,12 @@ +plugins { + id "java" + id "maven-publish" + + id "io.morethan.jmhreport" + id "me.champeau.gradle.jmh" + id "ru.vyarus.animalsniffer" +} + description = 'OpenTelemetry API' ext.moduleName = "io.opentelemetry.api" diff --git a/build.gradle b/build.gradle index 2982480137..b932c63ffa 100644 --- a/build.gradle +++ b/build.gradle @@ -1,26 +1,12 @@ -buildscript { - repositories { - mavenCentral() - jcenter() - maven { - url "https://plugins.gradle.org/m2/" - } - mavenLocal() - } - dependencies { - classpath 'ru.vyarus:gradle-animalsniffer-plugin:1.5.0' - classpath 'net.ltgt.gradle:gradle-errorprone-plugin:1.1.1' - classpath 'com.github.ben-manes:gradle-versions-plugin:0.20.0' - classpath "gradle.plugin.com.github.sherter.google-java-format:google-java-format-gradle-plugin:0.8" - classpath 'org.jfrog.buildinfo:build-info-extractor-gradle:4.9.8' - classpath "gradle.plugin.io.morethan.jmhreport:gradle-jmh-report:0.9.0" - } +plugins { + id "com.github.sherter.google-java-format" apply false + id "com.jfrog.artifactory" apply false + id "me.champeau.gradle.jmh" apply false + id "net.ltgt.errorprone" apply false + id "ru.vyarus.animalsniffer" apply false + id "io.morethan.jmhreport" apply false } -// Display the version report using: ./gradlew dependencyUpdates -// Also see https://github.com/ben-manes/gradle-versions-plugin. -apply plugin: 'com.github.ben-manes.versions' - subprojects { apply plugin: 'checkstyle' apply plugin: 'eclipse' @@ -30,26 +16,24 @@ subprojects { apply plugin: 'signing' apply plugin: 'jacoco' apply plugin: 'maven-publish' - // The plugin only has an effect if a signature is specified - apply plugin: 'ru.vyarus.animalsniffer' + apply plugin: 'com.github.sherter.google-java-format' apply plugin: 'net.ltgt.errorprone' - apply plugin: 'com.jfrog.artifactory' - apply plugin: 'io.morethan.jmhreport' - apply from: "$rootDir/jmh.gradle" + apply plugin: "com.jfrog.artifactory" group = "io.opentelemetry" version = "0.3.0-SNAPSHOT" // CURRENT_VERSION - sourceCompatibility = 1.7 - targetCompatibility = 1.7 - repositories { mavenCentral() + jcenter() mavenLocal() } - [compileJava, compileTestJava, compileJmhJava].each() { + sourceCompatibility = 1.7 + targetCompatibility = 1.7 + + tasks.withType(JavaCompile) { // We suppress the "try" warning because it disallows managing an auto-closeable with // try-with-resources without referencing the auto-closeable within the try block. // We suppress the "processing" warning as suggested in @@ -184,8 +168,10 @@ subprojects { configProperties["rootDir"] = rootDir } + jacoco { toolVersion = "0.8.2" } + googleJavaFormat { - toolVersion '1.7' + toolVersion = '1.7' } afterEvaluate { // Allow subproject to add more source sets. @@ -239,12 +225,38 @@ subprojects { maxHeapSize = '1500m' } - jmhReport { - jmhResultPath = project.file("${project.buildDir}/results/results.json") - jmhReportOutput = project.file("${project.buildDir}/results") - } + plugins.withId("me.champeau.gradle.jmh") { + dependencies { + jmh 'org.openjdk.jmh:jmh-core:1.19', + 'org.openjdk.jmh:jmh-generator-bytecode:1.19' + } - tasks.jmhRun.finalizedBy tasks.jmhReport + // invoke jmh on a single benchmark class like so: + // ./gradlew -PjmhIncludeSingleClass=StatsTraceContextBenchmark clean :grpc-core:jmh + jmh { + warmupIterations = 5 + iterations = 10 + fork = 1 + failOnError = true + resultFormat = 'JSON' + // None of our benchmarks need the tests, and we have pseudo-circular + // dependencies that break when including them. (context's testCompile + // depends on core; core's testCompile depends on testing) + includeTests = false + if (project.hasProperty('jmhIncludeSingleClass')) { + include = [ + project.property('jmhIncludeSingleClass') + ] + } + } + + jmhReport { + jmhResultPath = project.file("${project.buildDir}/reports/jmh/results.json") + jmhReportOutput = project.file("${project.buildDir}/reports/jmh") + } + + tasks.jmh.finalizedBy tasks.jmhReport + } apply from: "${rootProject.projectDir}/gradle/publish.gradle" diff --git a/context_prop/build.gradle b/context_prop/build.gradle index 3acc581a6f..bc8932a4b5 100644 --- a/context_prop/build.gradle +++ b/context_prop/build.gradle @@ -1,3 +1,10 @@ +plugins { + id "java" + id "maven-publish" + + id "ru.vyarus.animalsniffer" +} + description = 'OpenTelemetry Context Propagation' ext.moduleName = "io.opentelemetry.context.propagation" diff --git a/contrib/runtime_metrics/build.gradle b/contrib/runtime_metrics/build.gradle index 01d50b3bb8..766f8853f2 100644 --- a/contrib/runtime_metrics/build.gradle +++ b/contrib/runtime_metrics/build.gradle @@ -1,3 +1,10 @@ +plugins { + id "java" + id "maven-publish" + + id "ru.vyarus.animalsniffer" +} + description = 'OpenTelemetry Contrib Runtime Metrics' ext.moduleName = "io.opentelemetry.contrib.metrics.runtime" diff --git a/contrib/trace_utils/build.gradle b/contrib/trace_utils/build.gradle index f0a89a8d47..cb1df1431a 100644 --- a/contrib/trace_utils/build.gradle +++ b/contrib/trace_utils/build.gradle @@ -1,3 +1,10 @@ +plugins { + id "java" + id "maven-publish" + + id "ru.vyarus.animalsniffer" +} + description = 'OpenTelemetry Contrib Trace Utils' ext.moduleName = "io.opentelemetry.contrib.trace" diff --git a/exporters/inmemory/build.gradle b/exporters/inmemory/build.gradle index 7077cf2ced..2d5441bffd 100644 --- a/exporters/inmemory/build.gradle +++ b/exporters/inmemory/build.gradle @@ -1,3 +1,10 @@ +plugins { + id "java" + id "maven-publish" + + id "ru.vyarus.animalsniffer" +} + description = 'OpenTelemetry InMemory Export' ext.moduleName = "io.opentelemetry.exporters.inmemory" @@ -5,4 +12,7 @@ dependencies { api project(':opentelemetry-sdk') testImplementation "com.google.protobuf:protobuf-java:${protobufVersion}" + + signature "org.codehaus.mojo.signature:java17:1.0@signature" + signature "net.sf.androidscents.signature:android-api-level-24:7.0_r2@signature" } diff --git a/exporters/jaeger/build.gradle b/exporters/jaeger/build.gradle index 17171df26d..689db340aa 100644 --- a/exporters/jaeger/build.gradle +++ b/exporters/jaeger/build.gradle @@ -1,17 +1,14 @@ +plugins { + id "java" + id "maven-publish" + + id "com.google.protobuf" + id "ru.vyarus.animalsniffer" +} + description = 'OpenTelemetry - Jaeger Exporter' ext.moduleName = "io.opentelemetry.exporters.jaeger" -apply plugin: 'com.google.protobuf' - -buildscript { - repositories { - maven { url "https://plugins.gradle.org/m2/" } - } - dependencies { - classpath "com.google.protobuf:protobuf-gradle-plugin:0.8.8" - } -} - dependencies { api project(':opentelemetry-sdk') diff --git a/exporters/logging/build.gradle b/exporters/logging/build.gradle index 5d5ae24b0b..8fde3bde52 100644 --- a/exporters/logging/build.gradle +++ b/exporters/logging/build.gradle @@ -1,12 +1,13 @@ +plugins { + id "java" + id "maven-publish" + + id "ru.vyarus.animalsniffer" +} + description = 'OpenTelemetry - Logging Exporter' ext.moduleName = "io.opentelemetry.exporters.logging" -buildscript { - repositories { - maven { url "https://plugins.gradle.org/m2/" } - } -} - dependencies { api project(':opentelemetry-sdk') diff --git a/exporters/otprotocol/build.gradle b/exporters/otprotocol/build.gradle index a8902b3bb8..3ffd0f8081 100644 --- a/exporters/otprotocol/build.gradle +++ b/exporters/otprotocol/build.gradle @@ -1,3 +1,10 @@ +plugins { + id "java" + id "maven-publish" + + id "ru.vyarus.animalsniffer" +} + description = 'OpenTelemetry Protocol Exporter' ext.moduleName = "io.opentelemetry.exporters.otprotocol" diff --git a/jmh.gradle b/jmh.gradle deleted file mode 100644 index dbd2596182..0000000000 --- a/jmh.gradle +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Copyright 2020, OpenTelemetry Authors - * - * Licensed 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. - */ - - -/* - * This file should be imported in the top-level Gradle project. - * To add JMH microbenchmarks to any sub-project simply create 'src/jmh/java' - * and if required 'src/jmh/resource'. This JMH Gradle script will check for - * this sourceset, and will add tasks if it exists, and build any benchmarks. - * - * Running benchmarks can be done either through gradle using the task runJMH, - * or by downloading the created artifact and required dependencies. - * - * To use Gradle to download the benchmark for a specific version you can use - * a basic Gradle build file like the following. - * - * apply plugin: 'java' - * - * repositories { - * ... - * } - * - * dependencies { - * compile(group: 'GROUP', name: 'NAME', version: 'VERSION') - * compile(group: 'GROUP', name: 'NAME', version: 'VERSION', classifier: 'jmh') - * } - * - * task copyDependencies(type: Copy) { - * into 'execute' - * } - * - * task setup { - * dependsOn copyDependencies - * } - * - * $ gradle setup - * $ java -jar execute/group-name-version-jmh.jar - */ - -sourceSets { - jmh { - java.srcDir 'src/jmh/java' - resources.srcDir 'src/jmh/resources' - compileClasspath += main.output - runtimeClasspath += main.output - } -} - -def benchmarksAvailable = sourceSets.jmh.java.getFiles().any { f -> f.exists() } - -dependencies { - jmhCompile 'org.openjdk.jmh:jmh-core:1.23' - jmhAnnotationProcessor 'org.openjdk.jmh:jmh-generator-annprocess:1.23' -} - -configurations { - jmhCompile { - extendsFrom compile - } - - jmhImplementation { - extendsFrom implementation - extendsFrom jmhCompile - } - - jmh { - extendsFrom runtime - extendsFrom jmhCompile - } -} - -compileJmhJava { - enabled benchmarksAvailable - options.compilerArgs = compileJava.options.compilerArgs - options.fork = compileJava.options.fork - options.forkOptions = compileJava.options.forkOptions -} - -task jmhRun(type: JavaExec) { - enabled benchmarksAvailable - description 'Run JMH benchmark(s). Use the property jmhFilter to set benchmark filtering regex.' - group 'Verification' - classpath = sourceSets.jmh.runtimeClasspath - main = 'org.openjdk.jmh.Main' - // Allows users to filter JMH benchmarks using a regex - mkdir("${project.buildDir}/results") - args "--rf", "json", "--rff", "${project.buildDir}/results/results.json" - args project.findProperty("jmhFilter") ?: '' -} - -task jmhJar(type: Jar) { - dependsOn = ['compileJmhJava'] - - enabled benchmarksAvailable - description 'Generate executable JMH benchmark JAR, if any benchmarks exists.' - group 'Build' - classifier "jmh" - doFirst { - manifest { - attributes('Main-Class': 'org.openjdk.jmh.Main', 'Class-Path': ([jar.archiveFileName.get()] + configurations.runtimeClasspath.files.collect { it.getName() }).join(' ')) - } - } - from { - (configurations.jmhRuntimeClasspath.files + configurations.runtimeClasspath.files).collect { it.isDirectory() ? it : zipTree(it) } - } { - exclude 'META-INF/*.SF' - exclude 'META-INF/*.DSA' - exclude 'META-INF/*.RSA' - exclude 'log4j.properties' - } - from (sourceSets.jmh.output + sourceSets.main.output) -} - -artifacts { - if (benchmarksAvailable) { - archives jmhJar - } -} - -publishing { - publications { - mavenJava(MavenPublication) { - if (benchmarksAvailable) { - artifact jmhJar { - classifier "jmh" - } - } - } - } -} diff --git a/opentracing_shim/build.gradle b/opentracing_shim/build.gradle index 332f34de00..0674126b52 100644 --- a/opentracing_shim/build.gradle +++ b/opentracing_shim/build.gradle @@ -1,15 +1,17 @@ +plugins { + id "java" + id "maven-publish" +} + description = 'OpenTelemetry OpenTracing Bridge' ext.moduleName = "io.opentelemetry.opentracingshim" -def protobufVersion = '3.7.1' - dependencies { api project(':opentelemetry-api'), libraries.opentracing testImplementation project(':opentelemetry-sdk'), project(':opentelemetry-exporters-inmemory'), - libraries.protobuf, libraries.junit, libraries.truth, libraries.slf4jsimple, diff --git a/proto/build.gradle b/proto/build.gradle index b8c4b77928..ae6326e9d7 100644 --- a/proto/build.gradle +++ b/proto/build.gradle @@ -1,17 +1,14 @@ +plugins { + id "java" + id "maven-publish" + + id "com.google.protobuf" + id "ru.vyarus.animalsniffer" +} + description = 'OpenTelemetry Proto' ext.moduleName = 'io.opentelemetry.proto' -apply plugin: 'com.google.protobuf' - -buildscript { - repositories { - maven { url "https://plugins.gradle.org/m2/" } - } - dependencies { - classpath "com.google.protobuf:protobuf-gradle-plugin:0.8.8" - } -} - dependencies { api libraries.protobuf diff --git a/sdk/build.gradle b/sdk/build.gradle index ef335a8d95..770c563aeb 100644 --- a/sdk/build.gradle +++ b/sdk/build.gradle @@ -1,3 +1,12 @@ +plugins { + id "java" + id "maven-publish" + + id "io.morethan.jmhreport" + id "me.champeau.gradle.jmh" + id "ru.vyarus.animalsniffer" +} + description = 'OpenTelemetry SDK' ext.moduleName = "io.opentelemetry.sdk" diff --git a/sdk_contrib/async_processor/build.gradle b/sdk_contrib/async_processor/build.gradle index 98679041a7..2d7bd34358 100644 --- a/sdk_contrib/async_processor/build.gradle +++ b/sdk_contrib/async_processor/build.gradle @@ -1,3 +1,10 @@ +plugins { + id "java" + id "maven-publish" + + id "ru.vyarus.animalsniffer" +} + description = 'OpenTelemetry SDK Contrib' ext.moduleName = "io.opentelemetry.sdk.contrib.trace.export" diff --git a/sdk_contrib/auto_config/build.gradle b/sdk_contrib/auto_config/build.gradle index 02f08330bb..95a3cb5c09 100644 --- a/sdk_contrib/auto_config/build.gradle +++ b/sdk_contrib/auto_config/build.gradle @@ -1,3 +1,10 @@ +plugins { + id "java" + id "maven-publish" + + id "ru.vyarus.animalsniffer" +} + description = 'OpenTelemetry SDK Contrib for Configuration' ext.moduleName = "io.opentelemetry.sdk.contrib.config" diff --git a/sdk_contrib/aws_v1_support/build.gradle b/sdk_contrib/aws_v1_support/build.gradle index 15882f717f..62f800b57b 100644 --- a/sdk_contrib/aws_v1_support/build.gradle +++ b/sdk_contrib/aws_v1_support/build.gradle @@ -1,3 +1,10 @@ +plugins { + id "java" + id "maven-publish" + + id "ru.vyarus.animalsniffer" +} + description = 'OpenTelemetry SDK AWS SDK v1.x Support' ext.moduleName = "io.opentelemetry.sdk.contrib.trace.aws" diff --git a/sdk_contrib/testbed/build.gradle b/sdk_contrib/testbed/build.gradle index a2e5933937..e63372869b 100644 --- a/sdk_contrib/testbed/build.gradle +++ b/sdk_contrib/testbed/build.gradle @@ -1,3 +1,10 @@ +plugins { + id "java" + id "maven-publish" + + id "ru.vyarus.animalsniffer" +} + description = 'OpenTelemetry SDK Testbed' ext.moduleName = 'io.opentelemetry.sdk.contrib.trace.testbed' diff --git a/settings.gradle b/settings.gradle index 8c351ead1f..7ad981cafb 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,5 +1,23 @@ -rootProject.name = "opentelemetry-java" +pluginManagement { + plugins { + id "com.github.ben-manes.versions" version "0.20.0" + id "com.github.kt3k.coveralls" version "2.0.1" + id 'com.github.sherter.google-java-format' version "0.8" + id "com.google.protobuf" version "0.8.8" + id "com.jfrog.artifactory" version "4.13.0" + id "io.morethan.jmhreport" version "0.9.0" + id "me.champeau.gradle.jmh" version "0.5.0" + id "net.ltgt.errorprone" version "0.8.1" + id "ru.vyarus.animalsniffer" version "1.5.0" + } + repositories { + gradlePluginPortal() + google() + } +} + +rootProject.name = "opentelemetry-java" include ":opentelemetry-all", ":opentelemetry-api", ":opentelemetry-context-prop",