1*a24ffb47SSadaf Ebrahimibuildscript { 2*a24ffb47SSadaf Ebrahimi repositories { 3*a24ffb47SSadaf Ebrahimi mavenCentral() 4*a24ffb47SSadaf Ebrahimi mavenLocal() 5*a24ffb47SSadaf Ebrahimi maven { 6*a24ffb47SSadaf Ebrahimi url "https://plugins.gradle.org/m2/" 7*a24ffb47SSadaf Ebrahimi } 8*a24ffb47SSadaf Ebrahimi } 9*a24ffb47SSadaf Ebrahimi dependencies { 10*a24ffb47SSadaf Ebrahimi classpath 'ru.vyarus:gradle-animalsniffer-plugin:1.4.6' 11*a24ffb47SSadaf Ebrahimi classpath("org.springframework.boot:spring-boot-gradle-plugin:2.0.5.RELEASE") 12*a24ffb47SSadaf Ebrahimi classpath 'net.ltgt.gradle:gradle-errorprone-plugin:0.0.16' 13*a24ffb47SSadaf Ebrahimi classpath "net.ltgt.gradle:gradle-apt-plugin:0.18" 14*a24ffb47SSadaf Ebrahimi classpath 'com.github.ben-manes:gradle-versions-plugin:0.20.0' 15*a24ffb47SSadaf Ebrahimi classpath "gradle.plugin.com.github.sherter.google-java-format:google-java-format-gradle-plugin:0.8" 16*a24ffb47SSadaf Ebrahimi classpath "me.champeau.gradle:jmh-gradle-plugin:0.4.8" 17*a24ffb47SSadaf Ebrahimi classpath "gradle.plugin.io.morethan.jmhreport:gradle-jmh-report:0.9.0" 18*a24ffb47SSadaf Ebrahimi } 19*a24ffb47SSadaf Ebrahimi} 20*a24ffb47SSadaf Ebrahimi 21*a24ffb47SSadaf Ebrahimi// Display the version report using: ./gradlew dependencyUpdates 22*a24ffb47SSadaf Ebrahimi// Also see https://github.com/ben-manes/gradle-versions-plugin. 23*a24ffb47SSadaf Ebrahimiapply plugin: 'com.github.ben-manes.versions' 24*a24ffb47SSadaf Ebrahimi 25*a24ffb47SSadaf Ebrahimisubprojects { 26*a24ffb47SSadaf Ebrahimi // OC-Agent exporter depends on grpc-core which depends on errorprone annotations, and it 27*a24ffb47SSadaf Ebrahimi // doesn't work with checker framework. 28*a24ffb47SSadaf Ebrahimi def projectsDependOnGrpcCore = ["opencensus-exporter-metrics-ocagent", "opencensus-exporter-trace-ocagent"] 29*a24ffb47SSadaf Ebrahimi 30*a24ffb47SSadaf Ebrahimi // Don't use the Checker Framework by default, since it interferes with Error Prone. 31*a24ffb47SSadaf Ebrahimi def useCheckerFramework = rootProject.hasProperty('checkerFramework') && !(project.name in projectsDependOnGrpcCore) 32*a24ffb47SSadaf Ebrahimi def useErrorProne = !useCheckerFramework 33*a24ffb47SSadaf Ebrahimi 34*a24ffb47SSadaf Ebrahimi apply plugin: "checkstyle" 35*a24ffb47SSadaf Ebrahimi apply plugin: 'maven' 36*a24ffb47SSadaf Ebrahimi apply plugin: 'idea' 37*a24ffb47SSadaf Ebrahimi apply plugin: 'eclipse' 38*a24ffb47SSadaf Ebrahimi apply plugin: 'java' 39*a24ffb47SSadaf Ebrahimi apply plugin: "signing" 40*a24ffb47SSadaf Ebrahimi apply plugin: "jacoco" 41*a24ffb47SSadaf Ebrahimi // The plugin only has an effect if a signature is specified 42*a24ffb47SSadaf Ebrahimi apply plugin: 'ru.vyarus.animalsniffer' 43*a24ffb47SSadaf Ebrahimi apply plugin: 'findbugs' 44*a24ffb47SSadaf Ebrahimi apply plugin: 'net.ltgt.apt' 45*a24ffb47SSadaf Ebrahimi apply plugin: 'net.ltgt.apt-idea' 46*a24ffb47SSadaf Ebrahimi apply plugin: "me.champeau.gradle.jmh" 47*a24ffb47SSadaf Ebrahimi apply plugin: "io.morethan.jmhreport" 48*a24ffb47SSadaf Ebrahimi apply plugin: 'com.github.sherter.google-java-format' 49*a24ffb47SSadaf Ebrahimi if (useErrorProne) { 50*a24ffb47SSadaf Ebrahimi apply plugin: "net.ltgt.errorprone" 51*a24ffb47SSadaf Ebrahimi } 52*a24ffb47SSadaf Ebrahimi 53*a24ffb47SSadaf Ebrahimi group = "io.opencensus" 54*a24ffb47SSadaf Ebrahimi version = "0.32.0-SNAPSHOT" // CURRENT_OPENCENSUS_VERSION 55*a24ffb47SSadaf Ebrahimi 56*a24ffb47SSadaf Ebrahimi sourceCompatibility = 1.7 57*a24ffb47SSadaf Ebrahimi targetCompatibility = 1.7 58*a24ffb47SSadaf Ebrahimi 59*a24ffb47SSadaf Ebrahimi repositories { 60*a24ffb47SSadaf Ebrahimi mavenCentral() 61*a24ffb47SSadaf Ebrahimi mavenLocal() 62*a24ffb47SSadaf Ebrahimi } 63*a24ffb47SSadaf Ebrahimi 64*a24ffb47SSadaf Ebrahimi if (useCheckerFramework) { 65*a24ffb47SSadaf Ebrahimi configurations { 66*a24ffb47SSadaf Ebrahimi checkerFrameworkJavac { 67*a24ffb47SSadaf Ebrahimi description = 'a customization of the Open JDK javac compiler with additional support for type annotations' 68*a24ffb47SSadaf Ebrahimi } 69*a24ffb47SSadaf Ebrahimi checkerFrameworkAnnotatedJDK { 70*a24ffb47SSadaf Ebrahimi description = 'a copy of JDK classes with Checker Framework type qualifiers inserted' 71*a24ffb47SSadaf Ebrahimi } 72*a24ffb47SSadaf Ebrahimi } 73*a24ffb47SSadaf Ebrahimi } 74*a24ffb47SSadaf Ebrahimi 75*a24ffb47SSadaf Ebrahimi [compileJava, compileTestJava, compileJmhJava].each() { 76*a24ffb47SSadaf Ebrahimi // We suppress the "try" warning because it disallows managing an auto-closeable with 77*a24ffb47SSadaf Ebrahimi // try-with-resources without referencing the auto-closeable within the try block. 78*a24ffb47SSadaf Ebrahimi // We suppress the "processing" warning as suggested in 79*a24ffb47SSadaf Ebrahimi // https://groups.google.com/forum/#!topic/bazel-discuss/_R3A9TJSoPM 80*a24ffb47SSadaf Ebrahimi it.options.compilerArgs += ["-Xlint:all", "-Xlint:-try", "-Xlint:-processing"] 81*a24ffb47SSadaf Ebrahimi if (useErrorProne) { 82*a24ffb47SSadaf Ebrahimi it.options.compilerArgs += ["-XepAllDisabledChecksAsWarnings", "-XepDisableWarningsInGeneratedCode"] 83*a24ffb47SSadaf Ebrahimi 84*a24ffb47SSadaf Ebrahimi // -XepDisableWarningsInGeneratedCode doesn't suppress all warnings in generated 85*a24ffb47SSadaf Ebrahimi // protocol buffer code. 86*a24ffb47SSadaf Ebrahimi it.options.compilerArgs += ["-XepExcludedPaths:.*/gen_gradle/.*"] 87*a24ffb47SSadaf Ebrahimi 88*a24ffb47SSadaf Ebrahimi // MutableMethodReturnType can suggest returning Guava types from 89*a24ffb47SSadaf Ebrahimi // API methods (https://github.com/google/error-prone/issues/982). 90*a24ffb47SSadaf Ebrahimi it.options.compilerArgs += ["-Xep:MutableMethodReturnType:OFF"] 91*a24ffb47SSadaf Ebrahimi 92*a24ffb47SSadaf Ebrahimi // ReturnMissingNullable conflicts with Checker Framework null analysis. 93*a24ffb47SSadaf Ebrahimi it.options.compilerArgs += ["-Xep:ReturnMissingNullable:OFF"] 94*a24ffb47SSadaf Ebrahimi 95*a24ffb47SSadaf Ebrahimi // OpenCensus doesn't currently use Var annotations. 96*a24ffb47SSadaf Ebrahimi it.options.compilerArgs += ["-Xep:Var:OFF"] 97*a24ffb47SSadaf Ebrahimi 98*a24ffb47SSadaf Ebrahimi // ImmutableRefactoring suggests using com.google.errorprone.annotations.Immutable, 99*a24ffb47SSadaf Ebrahimi // but OpenCensus currently uses javax.annotation.concurrent.Immutable 100*a24ffb47SSadaf Ebrahimi it.options.compilerArgs += ["-Xep:ImmutableRefactoring:OFF"] 101*a24ffb47SSadaf Ebrahimi 102*a24ffb47SSadaf Ebrahimi // This check causes a NullPointerException 103*a24ffb47SSadaf Ebrahimi // (https://github.com/google/error-prone/issues/1138). 104*a24ffb47SSadaf Ebrahimi it.options.compilerArgs += ["-Xep:NullableDereference:OFF"] 105*a24ffb47SSadaf Ebrahimi 106*a24ffb47SSadaf Ebrahimi // ExpectedExceptionRefactoring and TestExceptionRefactoring suggest using 107*a24ffb47SSadaf Ebrahimi // assertThrows, but assertThrows only works well with lambdas. 108*a24ffb47SSadaf Ebrahimi it.options.compilerArgs += ["-Xep:ExpectedExceptionRefactoring:OFF"] 109*a24ffb47SSadaf Ebrahimi it.options.compilerArgs += ["-Xep:TestExceptionRefactoring:OFF"] 110*a24ffb47SSadaf Ebrahimi } 111*a24ffb47SSadaf Ebrahimi if (useCheckerFramework) { 112*a24ffb47SSadaf Ebrahimi it.options.compilerArgs += [ 113*a24ffb47SSadaf Ebrahimi '-processor', 114*a24ffb47SSadaf Ebrahimi 'com.google.auto.value.processor.AutoValueProcessor,org.checkerframework.checker.nullness.NullnessChecker', 115*a24ffb47SSadaf Ebrahimi "-Astubs=$rootDir/checker-framework/stubs" 116*a24ffb47SSadaf Ebrahimi ] 117*a24ffb47SSadaf Ebrahimi } 118*a24ffb47SSadaf Ebrahimi it.options.encoding = "UTF-8" 119*a24ffb47SSadaf Ebrahimi // Protobuf-generated code produces some warnings. 120*a24ffb47SSadaf Ebrahimi // https://github.com/google/protobuf/issues/2718 121*a24ffb47SSadaf Ebrahimi it.options.compilerArgs += ["-Xlint:-cast"] 122*a24ffb47SSadaf Ebrahimi if (!JavaVersion.current().isJava9() && !useErrorProne) { 123*a24ffb47SSadaf Ebrahimi // TODO(sebright): Enable -Werror for Java 9 once we upgrade AutoValue (issue #1017). 124*a24ffb47SSadaf Ebrahimi it.options.compilerArgs += ["-Werror"] 125*a24ffb47SSadaf Ebrahimi } 126*a24ffb47SSadaf Ebrahimi if (JavaVersion.current().isJava9()) { 127*a24ffb47SSadaf Ebrahimi // TODO(sebright): Currently, building with Java 9 produces the following "options" warnings: 128*a24ffb47SSadaf Ebrahimi // 129*a24ffb47SSadaf Ebrahimi // :opencensus-api:compileJavawarning: [options] bootstrap class path not set in conjunction with -source 1.6 130*a24ffb47SSadaf Ebrahimi // warning: [options] source value 1.6 is obsolete and will be removed in a future release 131*a24ffb47SSadaf Ebrahimi // warning: [options] target value 1.6 is obsolete and will be removed in a future release 132*a24ffb47SSadaf Ebrahimi it.options.compilerArgs += ["-Xlint:-options"] 133*a24ffb47SSadaf Ebrahimi } 134*a24ffb47SSadaf Ebrahimi } 135*a24ffb47SSadaf Ebrahimi 136*a24ffb47SSadaf Ebrahimi compileTestJava { 137*a24ffb47SSadaf Ebrahimi // serialVersionUID is basically guaranteed to be useless in tests 138*a24ffb47SSadaf Ebrahimi options.compilerArgs += ["-Xlint:-serial"] 139*a24ffb47SSadaf Ebrahimi // It undeprecates DoubleSubject.isEqualTo(Double). 140*a24ffb47SSadaf Ebrahimi options.compilerArgs += ["-Xlint:-deprecation"] 141*a24ffb47SSadaf Ebrahimi } 142*a24ffb47SSadaf Ebrahimi 143*a24ffb47SSadaf Ebrahimi jar.manifest { 144*a24ffb47SSadaf Ebrahimi attributes('Implementation-Title': name, 145*a24ffb47SSadaf Ebrahimi 'Implementation-Version': version, 146*a24ffb47SSadaf Ebrahimi 'Built-By': System.getProperty('user.name'), 147*a24ffb47SSadaf Ebrahimi 'Built-JDK': System.getProperty('java.version'), 148*a24ffb47SSadaf Ebrahimi 'Source-Compatibility': sourceCompatibility, 149*a24ffb47SSadaf Ebrahimi 'Target-Compatibility': targetCompatibility) 150*a24ffb47SSadaf Ebrahimi } 151*a24ffb47SSadaf Ebrahimi 152*a24ffb47SSadaf Ebrahimi javadoc.options { 153*a24ffb47SSadaf Ebrahimi encoding = 'UTF-8' 154*a24ffb47SSadaf Ebrahimi links 'https://docs.oracle.com/javase/8/docs/api/' 155*a24ffb47SSadaf Ebrahimi } 156*a24ffb47SSadaf Ebrahimi 157*a24ffb47SSadaf Ebrahimi ext { 158*a24ffb47SSadaf Ebrahimi appengineVersion = '1.9.71' 159*a24ffb47SSadaf Ebrahimi aspectjVersion = '1.8.11' 160*a24ffb47SSadaf Ebrahimi autoValueVersion = '1.4' 161*a24ffb47SSadaf Ebrahimi findBugsAnnotationsVersion = '3.0.1' 162*a24ffb47SSadaf Ebrahimi findBugsJsr305Version = '3.0.2' 163*a24ffb47SSadaf Ebrahimi errorProneVersion = '2.3.2' 164*a24ffb47SSadaf Ebrahimi grpcVersion = '1.27.2' 165*a24ffb47SSadaf Ebrahimi guavaVersion = '29.0-android' 166*a24ffb47SSadaf Ebrahimi googleAuthVersion = '0.20.0' 167*a24ffb47SSadaf Ebrahimi googleCloudBetaVersion = '0.100.0-beta' 168*a24ffb47SSadaf Ebrahimi googleCloudGaVersion = '1.82.0' 169*a24ffb47SSadaf Ebrahimi signalfxVersion = '0.0.48' 170*a24ffb47SSadaf Ebrahimi springBoot2Version = '2.1.5.RELEASE' 171*a24ffb47SSadaf Ebrahimi springBootVersion = '1.5.15.RELEASE' 172*a24ffb47SSadaf Ebrahimi springBootTestVersion = '2.1.1.RELEASE' 173*a24ffb47SSadaf Ebrahimi springCloudVersion = '1.3.4.RELEASE' 174*a24ffb47SSadaf Ebrahimi springVersion = '4.3.12.RELEASE' 175*a24ffb47SSadaf Ebrahimi prometheusVersion = '0.6.0' 176*a24ffb47SSadaf Ebrahimi protobufVersion = '3.11.4' 177*a24ffb47SSadaf Ebrahimi zipkinReporterVersion = '2.7.14' 178*a24ffb47SSadaf Ebrahimi jaegerReporterVersion = '0.33.1' 179*a24ffb47SSadaf Ebrahimi opencensusProtoVersion = '0.2.0' 180*a24ffb47SSadaf Ebrahimi gsonVersion = '2.8.6' 181*a24ffb47SSadaf Ebrahimi dropwizardVersion = '3.1.2' 182*a24ffb47SSadaf Ebrahimi dropwizard5Version = '5.0.0' 183*a24ffb47SSadaf Ebrahimi javaxServletVersion = "3.1.0" 184*a24ffb47SSadaf Ebrahimi httpcomponentsVersion = "4.5.8" 185*a24ffb47SSadaf Ebrahimi 186*a24ffb47SSadaf Ebrahimi libraries = [ 187*a24ffb47SSadaf Ebrahimi appengine_api: "com.google.appengine:appengine-api-1.0-sdk:${appengineVersion}", 188*a24ffb47SSadaf Ebrahimi aspectj: "org.aspectj:aspectjrt:${aspectjVersion}", 189*a24ffb47SSadaf Ebrahimi auto_value: "com.google.auto.value:auto-value:${autoValueVersion}", 190*a24ffb47SSadaf Ebrahimi auto_service: 'com.google.auto.service:auto-service:1.0-rc3', 191*a24ffb47SSadaf Ebrahimi byte_buddy: 'net.bytebuddy:byte-buddy:1.8.22', 192*a24ffb47SSadaf Ebrahimi config: 'com.typesafe:config:1.2.1', 193*a24ffb47SSadaf Ebrahimi disruptor: 'com.lmax:disruptor:3.4.2', 194*a24ffb47SSadaf Ebrahimi errorprone: "com.google.errorprone:error_prone_annotations:${errorProneVersion}", 195*a24ffb47SSadaf Ebrahimi findbugs_annotations: "com.google.code.findbugs:annotations:${findBugsAnnotationsVersion}", 196*a24ffb47SSadaf Ebrahimi google_auth: "com.google.auth:google-auth-library-credentials:${googleAuthVersion}", 197*a24ffb47SSadaf Ebrahimi google_cloud_logging: "com.google.cloud:google-cloud-logging:${googleCloudGaVersion}", 198*a24ffb47SSadaf Ebrahimi google_cloud_trace: "com.google.cloud:google-cloud-trace:${googleCloudBetaVersion}", 199*a24ffb47SSadaf Ebrahimi zipkin_reporter: "io.zipkin.reporter2:zipkin-reporter:${zipkinReporterVersion}", 200*a24ffb47SSadaf Ebrahimi zipkin_urlconnection: "io.zipkin.reporter2:zipkin-sender-urlconnection:${zipkinReporterVersion}", 201*a24ffb47SSadaf Ebrahimi jaeger_reporter: "io.jaegertracing:jaeger-client:${jaegerReporterVersion}", 202*a24ffb47SSadaf Ebrahimi google_cloud_monitoring: "com.google.cloud:google-cloud-monitoring:${googleCloudGaVersion}", 203*a24ffb47SSadaf Ebrahimi grpc_auth: "io.grpc:grpc-auth:${grpcVersion}", 204*a24ffb47SSadaf Ebrahimi grpc_context: "io.grpc:grpc-context:${grpcVersion}", 205*a24ffb47SSadaf Ebrahimi grpc_core: "io.grpc:grpc-core:${grpcVersion}", 206*a24ffb47SSadaf Ebrahimi grpc_netty: "io.grpc:grpc-netty:${grpcVersion}", 207*a24ffb47SSadaf Ebrahimi grpc_netty_shaded: "io.grpc:grpc-netty-shaded:${grpcVersion}", 208*a24ffb47SSadaf Ebrahimi grpc_stub: "io.grpc:grpc-stub:${grpcVersion}", 209*a24ffb47SSadaf Ebrahimi guava: "com.google.guava:guava:${guavaVersion}", 210*a24ffb47SSadaf Ebrahimi jsr305: "com.google.code.findbugs:jsr305:${findBugsJsr305Version}", 211*a24ffb47SSadaf Ebrahimi signalfx_java: "com.signalfx.public:signalfx-java:${signalfxVersion}", 212*a24ffb47SSadaf Ebrahimi spring_aspects: "org.springframework:spring-aspects:${springVersion}", 213*a24ffb47SSadaf Ebrahimi spring_boot_starter_web: "org.springframework.boot:spring-boot-starter-web:${springBootVersion}", 214*a24ffb47SSadaf Ebrahimi spring_boot_starter_web2: "org.springframework.boot:spring-boot-starter-web:${springBoot2Version}", 215*a24ffb47SSadaf Ebrahimi spring_cloud_build: "org.springframework.cloud:spring-cloud-build:${springCloudVersion}", 216*a24ffb47SSadaf Ebrahimi spring_cloud_starter_sleuth: "org.springframework.cloud:spring-cloud-starter-sleuth:${springCloudVersion}", 217*a24ffb47SSadaf Ebrahimi spring_context: "org.springframework:spring-context:${springVersion}", 218*a24ffb47SSadaf Ebrahimi spring_context_support: "org.springframework:spring-context-support:${springVersion}", 219*a24ffb47SSadaf Ebrahimi prometheus_simpleclient: "io.prometheus:simpleclient:${prometheusVersion}", 220*a24ffb47SSadaf Ebrahimi protobuf: "com.google.protobuf:protobuf-java:${protobufVersion}", 221*a24ffb47SSadaf Ebrahimi opencensus_proto: "io.opencensus:opencensus-proto:${opencensusProtoVersion}", 222*a24ffb47SSadaf Ebrahimi gson: "com.google.code.gson:gson:${gsonVersion}", 223*a24ffb47SSadaf Ebrahimi httpcomponents: "org.apache.httpcomponents:httpclient:${httpcomponentsVersion}", 224*a24ffb47SSadaf Ebrahimi 225*a24ffb47SSadaf Ebrahimi // Test dependencies. 226*a24ffb47SSadaf Ebrahimi guava_testlib: "com.google.guava:guava-testlib:${guavaVersion}", 227*a24ffb47SSadaf Ebrahimi junit: 'junit:junit:4.12', 228*a24ffb47SSadaf Ebrahimi mockito: 'org.mockito:mockito-core:2.28.1', 229*a24ffb47SSadaf Ebrahimi spring_test: "org.springframework:spring-test:${springVersion}", 230*a24ffb47SSadaf Ebrahimi truth: 'com.google.truth:truth:1.0', 231*a24ffb47SSadaf Ebrahimi spring_boot_test: "org.springframework.boot:spring-boot-starter-test:${springBootTestVersion}", 232*a24ffb47SSadaf Ebrahimi spring_boot_test2: "org.springframework.boot:spring-boot-starter-test:${springBoot2Version}", 233*a24ffb47SSadaf Ebrahimi dropwizard: "io.dropwizard.metrics:metrics-core:${dropwizardVersion}", 234*a24ffb47SSadaf Ebrahimi dropwizard5: "io.dropwizard.metrics5:metrics-core:${dropwizard5Version}", 235*a24ffb47SSadaf Ebrahimi sprint_boot_starter_tomcat: "org.springframework.boot:spring-boot-starter-tomcat:${springBoot2Version}", 236*a24ffb47SSadaf Ebrahimi javax_servlet: "javax.servlet:javax.servlet-api:${javaxServletVersion}", 237*a24ffb47SSadaf Ebrahimi 238*a24ffb47SSadaf Ebrahimi ] 239*a24ffb47SSadaf Ebrahimi } 240*a24ffb47SSadaf Ebrahimi 241*a24ffb47SSadaf Ebrahimi configurations { 242*a24ffb47SSadaf Ebrahimi compile { 243*a24ffb47SSadaf Ebrahimi // Detect Maven Enforcer's dependencyConvergence failures. We only 244*a24ffb47SSadaf Ebrahimi // care for artifacts used as libraries by others. 245*a24ffb47SSadaf Ebrahimi if (!(project.name in ['benchmarks', 'opencensus-all'])) { 246*a24ffb47SSadaf Ebrahimi resolutionStrategy.failOnVersionConflict() 247*a24ffb47SSadaf Ebrahimi } 248*a24ffb47SSadaf Ebrahimi } 249*a24ffb47SSadaf Ebrahimi } 250*a24ffb47SSadaf Ebrahimi 251*a24ffb47SSadaf Ebrahimi dependencies { 252*a24ffb47SSadaf Ebrahimi if (useCheckerFramework) { 253*a24ffb47SSadaf Ebrahimi ext.checkerFrameworkVersion = '2.10.1' 254*a24ffb47SSadaf Ebrahimi 255*a24ffb47SSadaf Ebrahimi // 2.4.0 is the last version of the Checker Framework compiler that supports annotations 256*a24ffb47SSadaf Ebrahimi // in comments, though it should continue to work with newer versions of the Checker Framework. 257*a24ffb47SSadaf Ebrahimi // See 258*a24ffb47SSadaf Ebrahimi // https://github.com/census-instrumentation/opencensus-java/pull/1112#issuecomment-381366366. 259*a24ffb47SSadaf Ebrahimi ext.checkerFrameworkCompilerVersion = '2.4.0' 260*a24ffb47SSadaf Ebrahimi 261*a24ffb47SSadaf Ebrahimi ext.jdkVersion = 'jdk8' 262*a24ffb47SSadaf Ebrahimi checkerFrameworkAnnotatedJDK "org.checkerframework:${jdkVersion}:${checkerFrameworkVersion}" 263*a24ffb47SSadaf Ebrahimi checkerFrameworkJavac "org.checkerframework:compiler:${checkerFrameworkCompilerVersion}" 264*a24ffb47SSadaf Ebrahimi compileOnly "org.checkerframework:checker:${checkerFrameworkVersion}" 265*a24ffb47SSadaf Ebrahimi compile "org.checkerframework:checker-qual:${checkerFrameworkVersion}" 266*a24ffb47SSadaf Ebrahimi compileOnly libraries.auto_value 267*a24ffb47SSadaf Ebrahimi } 268*a24ffb47SSadaf Ebrahimi 269*a24ffb47SSadaf Ebrahimi compileOnly libraries.errorprone, 270*a24ffb47SSadaf Ebrahimi libraries.jsr305 271*a24ffb47SSadaf Ebrahimi 272*a24ffb47SSadaf Ebrahimi testCompile libraries.guava_testlib, 273*a24ffb47SSadaf Ebrahimi libraries.junit, 274*a24ffb47SSadaf Ebrahimi libraries.mockito, 275*a24ffb47SSadaf Ebrahimi libraries.truth 276*a24ffb47SSadaf Ebrahimi 277*a24ffb47SSadaf Ebrahimi if (useErrorProne) { 278*a24ffb47SSadaf Ebrahimi // The ErrorProne plugin defaults to the latest, which would break our 279*a24ffb47SSadaf Ebrahimi // build if error prone releases a new version with a new check 280*a24ffb47SSadaf Ebrahimi errorprone "com.google.errorprone:error_prone_core:${errorProneVersion}" 281*a24ffb47SSadaf Ebrahimi } 282*a24ffb47SSadaf Ebrahimi } 283*a24ffb47SSadaf Ebrahimi 284*a24ffb47SSadaf Ebrahimi findbugs { 285*a24ffb47SSadaf Ebrahimi toolVersion = findBugsAnnotationsVersion 286*a24ffb47SSadaf Ebrahimi ignoreFailures = false // bug free or it doesn't ship! 287*a24ffb47SSadaf Ebrahimi effort = 'max' 288*a24ffb47SSadaf Ebrahimi reportLevel = 'low' // low = sensitive to even minor mistakes 289*a24ffb47SSadaf Ebrahimi omitVisitors = [] // bugs that we want to ignore 290*a24ffb47SSadaf Ebrahimi excludeFilter = file("$rootDir/findbugs-exclude.xml") 291*a24ffb47SSadaf Ebrahimi } 292*a24ffb47SSadaf Ebrahimi // Generate html report for findbugs. 293*a24ffb47SSadaf Ebrahimi findbugsMain { 294*a24ffb47SSadaf Ebrahimi reports { 295*a24ffb47SSadaf Ebrahimi xml.enabled = false 296*a24ffb47SSadaf Ebrahimi html.enabled = true 297*a24ffb47SSadaf Ebrahimi } 298*a24ffb47SSadaf Ebrahimi } 299*a24ffb47SSadaf Ebrahimi findbugsTest { 300*a24ffb47SSadaf Ebrahimi reports { 301*a24ffb47SSadaf Ebrahimi xml.enabled = false 302*a24ffb47SSadaf Ebrahimi html.enabled = true 303*a24ffb47SSadaf Ebrahimi } 304*a24ffb47SSadaf Ebrahimi } 305*a24ffb47SSadaf Ebrahimi findbugsJmh { 306*a24ffb47SSadaf Ebrahimi reports { 307*a24ffb47SSadaf Ebrahimi xml.enabled = false 308*a24ffb47SSadaf Ebrahimi html.enabled = true 309*a24ffb47SSadaf Ebrahimi } 310*a24ffb47SSadaf Ebrahimi } 311*a24ffb47SSadaf Ebrahimi 312*a24ffb47SSadaf Ebrahimi checkstyle { 313*a24ffb47SSadaf Ebrahimi configFile = file("$rootDir/buildscripts/checkstyle.xml") 314*a24ffb47SSadaf Ebrahimi toolVersion = "8.12" 315*a24ffb47SSadaf Ebrahimi ignoreFailures = false 316*a24ffb47SSadaf Ebrahimi if (rootProject.hasProperty("checkstyle.ignoreFailures")) { 317*a24ffb47SSadaf Ebrahimi ignoreFailures = rootProject.properties["checkstyle.ignoreFailures"].toBoolean() 318*a24ffb47SSadaf Ebrahimi } 319*a24ffb47SSadaf Ebrahimi configProperties["rootDir"] = rootDir 320*a24ffb47SSadaf Ebrahimi } 321*a24ffb47SSadaf Ebrahimi 322*a24ffb47SSadaf Ebrahimi googleJavaFormat { 323*a24ffb47SSadaf Ebrahimi toolVersion '1.7' 324*a24ffb47SSadaf Ebrahimi } 325*a24ffb47SSadaf Ebrahimi 326*a24ffb47SSadaf Ebrahimi afterEvaluate { // Allow subproject to add more source sets. 327*a24ffb47SSadaf Ebrahimi tasks.googleJavaFormat { 328*a24ffb47SSadaf Ebrahimi source = sourceSets*.allJava 329*a24ffb47SSadaf Ebrahimi include '**/*.java' 330*a24ffb47SSadaf Ebrahimi } 331*a24ffb47SSadaf Ebrahimi 332*a24ffb47SSadaf Ebrahimi tasks.verifyGoogleJavaFormat { 333*a24ffb47SSadaf Ebrahimi source = sourceSets*.allJava 334*a24ffb47SSadaf Ebrahimi include '**/*.java' 335*a24ffb47SSadaf Ebrahimi } 336*a24ffb47SSadaf Ebrahimi } 337*a24ffb47SSadaf Ebrahimi 338*a24ffb47SSadaf Ebrahimi signing { 339*a24ffb47SSadaf Ebrahimi required false 340*a24ffb47SSadaf Ebrahimi if (rootProject.hasProperty('signingUseGpgCmd')) { 341*a24ffb47SSadaf Ebrahimi useGpgCmd() 342*a24ffb47SSadaf Ebrahimi } 343*a24ffb47SSadaf Ebrahimi sign configurations.archives 344*a24ffb47SSadaf Ebrahimi } 345*a24ffb47SSadaf Ebrahimi 346*a24ffb47SSadaf Ebrahimi task javadocJar(type: Jar) { 347*a24ffb47SSadaf Ebrahimi classifier = 'javadoc' 348*a24ffb47SSadaf Ebrahimi from javadoc 349*a24ffb47SSadaf Ebrahimi } 350*a24ffb47SSadaf Ebrahimi 351*a24ffb47SSadaf Ebrahimi task sourcesJar(type: Jar) { 352*a24ffb47SSadaf Ebrahimi classifier = 'sources' 353*a24ffb47SSadaf Ebrahimi from sourceSets.main.allSource 354*a24ffb47SSadaf Ebrahimi } 355*a24ffb47SSadaf Ebrahimi 356*a24ffb47SSadaf Ebrahimi artifacts { 357*a24ffb47SSadaf Ebrahimi archives javadocJar, sourcesJar 358*a24ffb47SSadaf Ebrahimi } 359*a24ffb47SSadaf Ebrahimi 360*a24ffb47SSadaf Ebrahimi jmh { 361*a24ffb47SSadaf Ebrahimi jmhVersion = '1.20' 362*a24ffb47SSadaf Ebrahimi warmupIterations = 10 363*a24ffb47SSadaf Ebrahimi iterations = 10 364*a24ffb47SSadaf Ebrahimi fork = 1 365*a24ffb47SSadaf Ebrahimi failOnError = true 366*a24ffb47SSadaf Ebrahimi resultFormat = 'JSON' 367*a24ffb47SSadaf Ebrahimi // Allow to run single benchmark class like: 368*a24ffb47SSadaf Ebrahimi // ./gradlew -PjmhIncludeSingleClass=StatsTraceContextBenchmark clean :grpc-core:jmh 369*a24ffb47SSadaf Ebrahimi if (project.hasProperty('jmhIncludeSingleClass')) { 370*a24ffb47SSadaf Ebrahimi include = [ 371*a24ffb47SSadaf Ebrahimi project.property('jmhIncludeSingleClass') 372*a24ffb47SSadaf Ebrahimi ] 373*a24ffb47SSadaf Ebrahimi } 374*a24ffb47SSadaf Ebrahimi } 375*a24ffb47SSadaf Ebrahimi 376*a24ffb47SSadaf Ebrahimi jmhReport { 377*a24ffb47SSadaf Ebrahimi jmhResultPath = project.file("${project.buildDir}/reports/jmh/results.json") 378*a24ffb47SSadaf Ebrahimi jmhReportOutput = project.file("${project.buildDir}/reports/jmh") 379*a24ffb47SSadaf Ebrahimi } 380*a24ffb47SSadaf Ebrahimi 381*a24ffb47SSadaf Ebrahimi tasks.jmh.finalizedBy tasks.jmhReport 382*a24ffb47SSadaf Ebrahimi 383*a24ffb47SSadaf Ebrahimi uploadArchives { 384*a24ffb47SSadaf Ebrahimi repositories { 385*a24ffb47SSadaf Ebrahimi mavenDeployer { 386*a24ffb47SSadaf Ebrahimi beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) } 387*a24ffb47SSadaf Ebrahimi 388*a24ffb47SSadaf Ebrahimi def configureAuth = { 389*a24ffb47SSadaf Ebrahimi if (rootProject.hasProperty('ossrhUsername') && rootProject.hasProperty('ossrhPassword')) { 390*a24ffb47SSadaf Ebrahimi authentication(userName:rootProject.ossrhUsername, password: rootProject.ossrhPassword) 391*a24ffb47SSadaf Ebrahimi } 392*a24ffb47SSadaf Ebrahimi } 393*a24ffb47SSadaf Ebrahimi 394*a24ffb47SSadaf Ebrahimi repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/", configureAuth) 395*a24ffb47SSadaf Ebrahimi 396*a24ffb47SSadaf Ebrahimi snapshotRepository(url: "https://oss.sonatype.org/content/repositories/snapshots/", configureAuth) 397*a24ffb47SSadaf Ebrahimi 398*a24ffb47SSadaf Ebrahimi pom.project { 399*a24ffb47SSadaf Ebrahimi name "OpenCensus" 400*a24ffb47SSadaf Ebrahimi packaging 'jar' 401*a24ffb47SSadaf Ebrahimi description project.description 402*a24ffb47SSadaf Ebrahimi url 'https://github.com/census-instrumentation/opencensus-java' 403*a24ffb47SSadaf Ebrahimi 404*a24ffb47SSadaf Ebrahimi scm { 405*a24ffb47SSadaf Ebrahimi connection 'scm:svn:https://github.com/census-instrumentation/opencensus-java' 406*a24ffb47SSadaf Ebrahimi developerConnection 'scm:git:[email protected]/census-instrumentation/opencensus-java' 407*a24ffb47SSadaf Ebrahimi url 'https://github.com/census-instrumentation/opencensus-java' 408*a24ffb47SSadaf Ebrahimi } 409*a24ffb47SSadaf Ebrahimi 410*a24ffb47SSadaf Ebrahimi licenses { 411*a24ffb47SSadaf Ebrahimi license { 412*a24ffb47SSadaf Ebrahimi name 'The Apache License, Version 2.0' 413*a24ffb47SSadaf Ebrahimi url 'http://www.apache.org/licenses/LICENSE-2.0.txt' 414*a24ffb47SSadaf Ebrahimi } 415*a24ffb47SSadaf Ebrahimi } 416*a24ffb47SSadaf Ebrahimi 417*a24ffb47SSadaf Ebrahimi developers { 418*a24ffb47SSadaf Ebrahimi developer { 419*a24ffb47SSadaf Ebrahimi id 'io.opencensus' 420*a24ffb47SSadaf Ebrahimi name 'OpenCensus Contributors' 421*a24ffb47SSadaf Ebrahimi email '[email protected]' 422*a24ffb47SSadaf Ebrahimi url 'opencensus.io' 423*a24ffb47SSadaf Ebrahimi // https://issues.gradle.org/browse/GRADLE-2719 424*a24ffb47SSadaf Ebrahimi organization = 'OpenCensus Authors' 425*a24ffb47SSadaf Ebrahimi organizationUrl 'https://www.opencensus.io' 426*a24ffb47SSadaf Ebrahimi } 427*a24ffb47SSadaf Ebrahimi } 428*a24ffb47SSadaf Ebrahimi } 429*a24ffb47SSadaf Ebrahimi } 430*a24ffb47SSadaf Ebrahimi } 431*a24ffb47SSadaf Ebrahimi } 432*a24ffb47SSadaf Ebrahimi 433*a24ffb47SSadaf Ebrahimi // Upload the following artifacts only: 434*a24ffb47SSadaf Ebrahimi uploadArchives.onlyIf { 435*a24ffb47SSadaf Ebrahimi name in ['opencensus-api', 436*a24ffb47SSadaf Ebrahimi 'opencensus-contrib-agent', 437*a24ffb47SSadaf Ebrahimi 'opencensus-contrib-appengine-standard-util', 438*a24ffb47SSadaf Ebrahimi 'opencensus-contrib-dropwizard', 439*a24ffb47SSadaf Ebrahimi 'opencensus-contrib-dropwizard5', 440*a24ffb47SSadaf Ebrahimi 'opencensus-contrib-exemplar-util', 441*a24ffb47SSadaf Ebrahimi 'opencensus-contrib-grpc-metrics', 442*a24ffb47SSadaf Ebrahimi 'opencensus-contrib-grpc-util', 443*a24ffb47SSadaf Ebrahimi 'opencensus-contrib-http-jaxrs', 444*a24ffb47SSadaf Ebrahimi 'opencensus-contrib-http-jetty-client', 445*a24ffb47SSadaf Ebrahimi 'opencensus-contrib-http-servlet', 446*a24ffb47SSadaf Ebrahimi 'opencensus-contrib-http-util', 447*a24ffb47SSadaf Ebrahimi 'opencensus-contrib-log-correlation-stackdriver', 448*a24ffb47SSadaf Ebrahimi 'opencensus-contrib-observability-ready-util', 449*a24ffb47SSadaf Ebrahimi 'opencensus-contrib-resource-util', 450*a24ffb47SSadaf Ebrahimi 'opencensus-contrib-spring', 451*a24ffb47SSadaf Ebrahimi 'opencensus-contrib-spring-sleuth-v1x', 452*a24ffb47SSadaf Ebrahimi 'opencensus-contrib-spring-starter', 453*a24ffb47SSadaf Ebrahimi 'opencensus-contrib-zpages', 454*a24ffb47SSadaf Ebrahimi 'opencensus-exporter-metrics-ocagent', 455*a24ffb47SSadaf Ebrahimi 'opencensus-exporter-metrics-util', 456*a24ffb47SSadaf Ebrahimi 'opencensus-exporter-stats-prometheus', 457*a24ffb47SSadaf Ebrahimi 'opencensus-exporter-stats-signalfx', 458*a24ffb47SSadaf Ebrahimi 'opencensus-exporter-stats-stackdriver', 459*a24ffb47SSadaf Ebrahimi 'opencensus-exporter-trace-datadog', 460*a24ffb47SSadaf Ebrahimi 'opencensus-exporter-trace-elasticsearch', 461*a24ffb47SSadaf Ebrahimi 'opencensus-exporter-trace-instana', 462*a24ffb47SSadaf Ebrahimi 'opencensus-exporter-trace-logging', 463*a24ffb47SSadaf Ebrahimi 'opencensus-exporter-trace-ocagent', 464*a24ffb47SSadaf Ebrahimi 'opencensus-exporter-trace-stackdriver', 465*a24ffb47SSadaf Ebrahimi 'opencensus-exporter-trace-zipkin', 466*a24ffb47SSadaf Ebrahimi 'opencensus-exporter-trace-jaeger', 467*a24ffb47SSadaf Ebrahimi 'opencensus-exporter-trace-util', 468*a24ffb47SSadaf Ebrahimi 'opencensus-impl-core', 469*a24ffb47SSadaf Ebrahimi 'opencensus-impl-lite', 470*a24ffb47SSadaf Ebrahimi 'opencensus-impl', 471*a24ffb47SSadaf Ebrahimi 'opencensus-testing'] 472*a24ffb47SSadaf Ebrahimi } 473*a24ffb47SSadaf Ebrahimi 474*a24ffb47SSadaf Ebrahimi // At a test failure, log the stack trace to the console so that we don't 475*a24ffb47SSadaf Ebrahimi // have to open the HTML in a browser. 476*a24ffb47SSadaf Ebrahimi test { 477*a24ffb47SSadaf Ebrahimi testLogging { 478*a24ffb47SSadaf Ebrahimi exceptionFormat = 'full' 479*a24ffb47SSadaf Ebrahimi showExceptions true 480*a24ffb47SSadaf Ebrahimi showCauses true 481*a24ffb47SSadaf Ebrahimi showStackTraces true 482*a24ffb47SSadaf Ebrahimi } 483*a24ffb47SSadaf Ebrahimi maxHeapSize = '1500m' 484*a24ffb47SSadaf Ebrahimi } 485*a24ffb47SSadaf Ebrahimi 486*a24ffb47SSadaf Ebrahimi if (useCheckerFramework) { 487*a24ffb47SSadaf Ebrahimi allprojects { 488*a24ffb47SSadaf Ebrahimi tasks.withType(JavaCompile).all { JavaCompile compile -> 489*a24ffb47SSadaf Ebrahimi compile.doFirst { 490*a24ffb47SSadaf Ebrahimi compile.options.compilerArgs += [ 491*a24ffb47SSadaf Ebrahimi '-Xmaxerrs', '10000', 492*a24ffb47SSadaf Ebrahimi "-Xbootclasspath/p:${configurations.checkerFrameworkAnnotatedJDK.asPath}", 493*a24ffb47SSadaf Ebrahimi "-AskipDefs=\\.AutoValue_|^io.opencensus.contrib.appengine.standard.util.TraceIdProto\$|^io.opencensus.contrib.appengine.standard.util.TraceProto\$", 494*a24ffb47SSadaf Ebrahimi "-AinvariantArrays" 495*a24ffb47SSadaf Ebrahimi ] 496*a24ffb47SSadaf Ebrahimi options.fork = true 497*a24ffb47SSadaf Ebrahimi options.forkOptions.jvmArgs += ["-Xbootclasspath/p:${configurations.checkerFrameworkJavac.asPath}"] 498*a24ffb47SSadaf Ebrahimi } 499*a24ffb47SSadaf Ebrahimi } 500*a24ffb47SSadaf Ebrahimi } 501*a24ffb47SSadaf Ebrahimi } 502*a24ffb47SSadaf Ebrahimi 503*a24ffb47SSadaf Ebrahimi // For projects that depend on gRPC during test execution, make sure to 504*a24ffb47SSadaf Ebrahimi // also configure ALPN if running on a platform (e.g. FreeBSD) that is not 505*a24ffb47SSadaf Ebrahimi // supported by io.netty:netty-tcnative-boringssl-static:jar. Also see: 506*a24ffb47SSadaf Ebrahimi // https://github.com/grpc/grpc-java/blob/master/SECURITY.md#tls-with-jdk-jetty-alpnnpn 507*a24ffb47SSadaf Ebrahimi if (project.name in ['opencensus-exporter-stats-stackdriver', 508*a24ffb47SSadaf Ebrahimi 'opencensus-exporter-trace-stackdriver']) { 509*a24ffb47SSadaf Ebrahimi def os = org.gradle.internal.os.OperatingSystem.current() 510*a24ffb47SSadaf Ebrahimi if (!os.isLinux() && !os.isWindows() && !os.isMacOsX()) { 511*a24ffb47SSadaf Ebrahimi configurations { 512*a24ffb47SSadaf Ebrahimi alpn 513*a24ffb47SSadaf Ebrahimi } 514*a24ffb47SSadaf Ebrahimi dependencies { 515*a24ffb47SSadaf Ebrahimi alpn 'org.mortbay.jetty.alpn:jetty-alpn-agent:2.0.7' 516*a24ffb47SSadaf Ebrahimi } 517*a24ffb47SSadaf Ebrahimi test { 518*a24ffb47SSadaf Ebrahimi jvmArgs "-javaagent:${configurations.alpn.asPath}" 519*a24ffb47SSadaf Ebrahimi } 520*a24ffb47SSadaf Ebrahimi } 521*a24ffb47SSadaf Ebrahimi } 522*a24ffb47SSadaf Ebrahimi} 523