xref: /aosp_15_r20/external/opencensus-java/build.gradle (revision a24ffb47c3166327784aa05b149974e82e8f71b8)
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