aboutsummaryrefslogtreecommitdiff
path: root/build.gradle
diff options
context:
space:
mode:
Diffstat (limited to 'build.gradle')
-rw-r--r--build.gradle497
1 files changed, 497 insertions, 0 deletions
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 00000000..dcb006ce
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,497 @@
+buildscript {
+ repositories {
+ mavenCentral()
+ mavenLocal()
+ maven {
+ url "https://plugins.gradle.org/m2/"
+ }
+ }
+ dependencies {
+ classpath 'ru.vyarus:gradle-animalsniffer-plugin:1.4.6'
+ classpath 'net.ltgt.gradle:gradle-errorprone-plugin:0.0.16'
+ classpath "net.ltgt.gradle:gradle-apt-plugin:0.18"
+ 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.7.1"
+ classpath "me.champeau.gradle:jmh-gradle-plugin:0.4.7"
+ classpath "gradle.plugin.io.morethan.jmhreport:gradle-jmh-report:0.7.0"
+ }
+}
+
+// Display the version report using: ./gradlew dependencyUpdates
+// Also see https://github.com/ben-manes/gradle-versions-plugin.
+apply plugin: 'com.github.ben-manes.versions'
+
+// Don't use the Checker Framework by default, since it interferes with Error Prone.
+def useCheckerFramework = rootProject.hasProperty('checkerFramework')
+def useErrorProne = !useCheckerFramework
+
+subprojects {
+ apply plugin: "checkstyle"
+ apply plugin: 'maven'
+ apply plugin: 'idea'
+ apply plugin: 'eclipse'
+ apply plugin: 'java'
+ apply plugin: "signing"
+ apply plugin: "jacoco"
+ // The plugin only has an effect if a signature is specified
+ apply plugin: 'ru.vyarus.animalsniffer'
+ apply plugin: 'findbugs'
+ apply plugin: 'net.ltgt.apt'
+ apply plugin: "me.champeau.gradle.jmh"
+ apply plugin: "io.morethan.jmhreport"
+ // Plugins that require java8
+ if (JavaVersion.current().isJava8Compatible()) {
+ if (useErrorProne) {
+ apply plugin: "net.ltgt.errorprone"
+ }
+ apply plugin: 'com.github.sherter.google-java-format'
+ }
+
+ group = "io.opencensus"
+ version = "0.17.0-SNAPSHOT" // CURRENT_OPENCENSUS_VERSION
+
+ sourceCompatibility = 1.6
+ targetCompatibility = 1.6
+
+ repositories {
+ mavenCentral()
+ mavenLocal()
+ }
+
+ if (useCheckerFramework) {
+ configurations {
+ checkerFrameworkJavac {
+ description = 'a customization of the Open JDK javac compiler with additional support for type annotations'
+ }
+ checkerFrameworkAnnotatedJDK {
+ description = 'a copy of JDK classes with Checker Framework type qualifiers inserted'
+ }
+ }
+ }
+
+ [compileJava, compileTestJava, compileJmhJava].each() {
+ // 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
+ // https://groups.google.com/forum/#!topic/bazel-discuss/_R3A9TJSoPM
+ it.options.compilerArgs += ["-Xlint:all", "-Xlint:-try", "-Xlint:-processing"]
+ if (useErrorProne) {
+ if (JavaVersion.current().isJava8Compatible()) {
+ it.options.compilerArgs += ["-XepAllDisabledChecksAsWarnings", "-XepDisableWarningsInGeneratedCode"]
+
+ // MutableMethodReturnType can suggest returning Guava types from
+ // API methods (https://github.com/google/error-prone/issues/982).
+ it.options.compilerArgs += ["-Xep:MutableMethodReturnType:OFF"]
+
+ // ReturnMissingNullable conflicts with Checker Framework null analysis.
+ it.options.compilerArgs += ["-Xep:ReturnMissingNullable:OFF"]
+
+ // OpenCensus doesn't currently use Var annotations.
+ it.options.compilerArgs += ["-Xep:Var:OFF"]
+ }
+ }
+ if (useCheckerFramework) {
+ it.options.compilerArgs += [
+ '-processor',
+ 'com.google.auto.value.processor.AutoValueProcessor,org.checkerframework.checker.nullness.NullnessChecker',
+ "-Astubs=$rootDir/checker-framework/stubs"
+ ]
+ }
+ it.options.encoding = "UTF-8"
+ // Protobuf-generated code produces some warnings.
+ // https://github.com/google/protobuf/issues/2718
+ it.options.compilerArgs += ["-Xlint:-cast"]
+ if (!JavaVersion.current().isJava9()) {
+ // TODO(sebright): Enable -Werror for Java 9 once we upgrade AutoValue (issue #1017).
+ it.options.compilerArgs += ["-Werror"]
+ }
+ if (JavaVersion.current().isJava7()) {
+ // Suppress all deprecation warnings with Java 7, since there are some bugs in its handling of
+ // @SuppressWarnings. See
+ // https://stackoverflow.com/questions/26921774/how-to-avoid-deprecation-warnings-when-suppresswarningsdeprecation-doesnt
+ it.options.compilerArgs += ["-Xlint:-deprecation"]
+
+ // TODO(bdrutu): Enable for Java 7 when fix the issue with configuring bootstrap class.
+ // [options] bootstrap class path not set in conjunction with -source 1.6
+ it.options.compilerArgs += ["-Xlint:-options"]
+ }
+ if (JavaVersion.current().isJava9()) {
+ // TODO(sebright): Currently, building with Java 9 produces the following "options" warnings:
+ //
+ // :opencensus-api:compileJavawarning: [options] bootstrap class path not set in conjunction with -source 1.6
+ // warning: [options] source value 1.6 is obsolete and will be removed in a future release
+ // warning: [options] target value 1.6 is obsolete and will be removed in a future release
+ it.options.compilerArgs += ["-Xlint:-options"]
+ }
+ }
+
+ compileTestJava {
+ // serialVersionUID is basically guaranteed to be useless in tests
+ options.compilerArgs += ["-Xlint:-serial"]
+ // It undeprecates DoubleSubject.isEqualTo(Double).
+ options.compilerArgs += ["-Xlint:-deprecation"]
+ }
+
+ jar.manifest {
+ attributes('Implementation-Title': name,
+ 'Implementation-Version': version,
+ 'Built-By': System.getProperty('user.name'),
+ 'Built-JDK': System.getProperty('java.version'),
+ 'Source-Compatibility': sourceCompatibility,
+ 'Target-Compatibility': targetCompatibility)
+ }
+
+ javadoc.options {
+ encoding = 'UTF-8'
+ links 'https://docs.oracle.com/javase/8/docs/api/'
+ }
+
+ ext {
+ appengineVersion = '1.9.64'
+ aspectjVersion = '1.8.11'
+ autoValueVersion = '1.4'
+ findBugsAnnotationsVersion = '3.0.1'
+ findBugsJsr305Version = '3.0.2'
+ errorProneVersion = '2.3.1'
+ grpcVersion = '1.14.0'
+ guavaVersion = '20.0'
+ googleAuthVersion = '0.11.0'
+ googleCloudBetaVersion = '0.64.0-beta'
+ googleCloudGaVersion = '1.46.0'
+ log4j2Version = '2.11.1'
+ signalfxVersion = '0.0.39'
+ springBootVersion = '1.5.15.RELEASE'
+ springCloudVersion = '1.3.4.RELEASE'
+ springVersion = '4.3.12.RELEASE'
+ prometheusVersion = '0.4.0'
+ protobufVersion = '3.5.1'
+ zipkinReporterVersion = '2.3.2'
+ jaegerReporterVersion = '0.27.0'
+ opencensusProtoVersion = '0.0.2'
+ dropwizardVersion = '3.1.2'
+
+ libraries = [
+ appengine_api: "com.google.appengine:appengine-api-1.0-sdk:${appengineVersion}",
+ aspectj: "org.aspectj:aspectjrt:${aspectjVersion}",
+ auto_value: "com.google.auto.value:auto-value:${autoValueVersion}",
+ auto_service: 'com.google.auto.service:auto-service:1.0-rc3',
+ byte_buddy: 'net.bytebuddy:byte-buddy:1.7.11',
+ config: 'com.typesafe:config:1.2.1',
+ disruptor: 'com.lmax:disruptor:3.4.1',
+ errorprone: "com.google.errorprone:error_prone_annotations:${errorProneVersion}",
+ findbugs_annotations: "com.google.code.findbugs:annotations:${findBugsAnnotationsVersion}",
+ google_auth: "com.google.auth:google-auth-library-credentials:${googleAuthVersion}",
+ google_cloud_logging: "com.google.cloud:google-cloud-logging:${googleCloudGaVersion}",
+ google_cloud_trace: "com.google.cloud:google-cloud-trace:${googleCloudBetaVersion}",
+ log4j2: "org.apache.logging.log4j:log4j-core:${log4j2Version}",
+ zipkin_reporter: "io.zipkin.reporter2:zipkin-reporter:${zipkinReporterVersion}",
+ zipkin_urlconnection: "io.zipkin.reporter2:zipkin-sender-urlconnection:${zipkinReporterVersion}",
+ jaeger_reporter: "com.uber.jaeger:jaeger-core:${jaegerReporterVersion}",
+ google_cloud_monitoring: "com.google.cloud:google-cloud-monitoring:${googleCloudGaVersion}",
+ grpc_context: "io.grpc:grpc-context:${grpcVersion}",
+ grpc_core: "io.grpc:grpc-core:${grpcVersion}",
+ grpc_netty: "io.grpc:grpc-netty:${grpcVersion}",
+ grpc_stub: "io.grpc:grpc-stub:${grpcVersion}",
+ guava: "com.google.guava:guava:${guavaVersion}",
+ jsr305: "com.google.code.findbugs:jsr305:${findBugsJsr305Version}",
+ signalfx_java: "com.signalfx.public:signalfx-java:${signalfxVersion}",
+ spring_aspects: "org.springframework:spring-aspects:${springVersion}",
+ spring_boot_starter_web: "org.springframework.boot:spring-boot-starter-web:${springBootVersion}",
+ spring_cloud_build: "org.springframework.cloud:spring-cloud-build:${springCloudVersion}",
+ spring_cloud_starter_sleuth: "org.springframework.cloud:spring-cloud-starter-sleuth:${springCloudVersion}",
+ spring_context: "org.springframework:spring-context:${springVersion}",
+ spring_context_support: "org.springframework:spring-context-support:${springVersion}",
+ prometheus_simpleclient: "io.prometheus:simpleclient:${prometheusVersion}",
+ protobuf: "com.google.protobuf:protobuf-java:${protobufVersion}",
+ opencensus_proto: "io.opencensus:opencensus-proto:${opencensusProtoVersion}",
+
+ // Test dependencies.
+ guava_testlib: "com.google.guava:guava-testlib:${guavaVersion}",
+ junit: 'junit:junit:4.12',
+ mockito: 'org.mockito:mockito-core:1.9.5',
+ spring_test: "org.springframework:spring-test:${springVersion}",
+ truth: 'com.google.truth:truth:0.30',
+ dropwizard: "io.dropwizard.metrics:metrics-core:${dropwizardVersion}",
+ ]
+ }
+
+ configurations {
+ compile {
+ // Detect Maven Enforcer's dependencyConvergence failures. We only
+ // care for artifacts used as libraries by others.
+ if (!(project.name in ['benchmarks', 'opencensus-all',
+ 'opencensus-exporter-stats-stackdriver',
+ 'opencensus-exporter-trace-stackdriver',
+ 'opencensus-exporter-trace-jaeger'])) {
+ resolutionStrategy.failOnVersionConflict()
+ }
+ }
+ }
+
+ dependencies {
+ if (useCheckerFramework) {
+ ext.checkerFrameworkVersion = '2.5.5'
+
+ // 2.4.0 is the last version of the Checker Framework compiler that supports annotations
+ // in comments, though it should continue to work with newer versions of the Checker Framework.
+ // See
+ // https://github.com/census-instrumentation/opencensus-java/pull/1112#issuecomment-381366366.
+ ext.checkerFrameworkCompilerVersion = '2.4.0'
+
+ ext.jdkVersion = 'jdk8'
+ checkerFrameworkAnnotatedJDK "org.checkerframework:${jdkVersion}:${checkerFrameworkVersion}"
+ checkerFrameworkJavac "org.checkerframework:compiler:${checkerFrameworkCompilerVersion}"
+ compileOnly "org.checkerframework:checker:${checkerFrameworkVersion}"
+ compile "org.checkerframework:checker-qual:${checkerFrameworkVersion}"
+ compileOnly libraries.auto_value
+ }
+
+ compileOnly libraries.errorprone,
+ libraries.jsr305
+
+ testCompile libraries.guava_testlib,
+ libraries.junit,
+ libraries.mockito,
+ libraries.truth
+
+ if (useErrorProne && JavaVersion.current().isJava8Compatible()) {
+ // The ErrorProne plugin defaults to the latest, which would break our
+ // build if error prone releases a new version with a new check
+ errorprone "com.google.errorprone:error_prone_core:${errorProneVersion}"
+ }
+ }
+
+ findbugs {
+ toolVersion = findBugsAnnotationsVersion
+ ignoreFailures = false // bug free or it doesn't ship!
+ effort = 'max'
+ reportLevel = 'low' // low = sensitive to even minor mistakes
+ omitVisitors = [] // bugs that we want to ignore
+ excludeFilter = file("$rootDir/findbugs-exclude.xml")
+ }
+ // Generate html report for findbugs.
+ findbugsMain {
+ reports {
+ xml.enabled = false
+ html.enabled = true
+ }
+ }
+ findbugsTest {
+ reports {
+ xml.enabled = false
+ html.enabled = true
+ }
+ }
+ findbugsJmh {
+ reports {
+ xml.enabled = false
+ html.enabled = true
+ }
+ }
+
+ checkstyle {
+ configFile = file("$rootDir/buildscripts/checkstyle.xml")
+ toolVersion = "8.12"
+ ignoreFailures = false
+ if (rootProject.hasProperty("checkstyle.ignoreFailures")) {
+ ignoreFailures = rootProject.properties["checkstyle.ignoreFailures"].toBoolean()
+ }
+ configProperties["rootDir"] = rootDir
+ }
+
+ // Disable checkstyle if no java8.
+ checkstyleMain.enabled = JavaVersion.current().isJava8Compatible()
+ checkstyleTest.enabled = JavaVersion.current().isJava8Compatible()
+ checkstyleJmh.enabled = JavaVersion.current().isJava8Compatible()
+
+ // Google formatter works only on java8.
+ if (JavaVersion.current().isJava8Compatible()) {
+ googleJavaFormat {
+ toolVersion '1.6'
+ }
+
+ afterEvaluate { // Allow subproject to add more source sets.
+ tasks.googleJavaFormat {
+ source = sourceSets*.allJava
+ include '**/*.java'
+ }
+
+ tasks.verifyGoogleJavaFormat {
+ source = sourceSets*.allJava
+ include '**/*.java'
+ }
+ }
+ }
+
+ signing {
+ required false
+ sign configurations.archives
+ }
+
+ task javadocJar(type: Jar) {
+ classifier = 'javadoc'
+ from javadoc
+ }
+
+ task sourcesJar(type: Jar) {
+ classifier = 'sources'
+ from sourceSets.main.allSource
+ }
+
+ artifacts {
+ archives javadocJar, sourcesJar
+ }
+
+ jmh {
+ jmhVersion = '1.20'
+ warmupIterations = 10
+ iterations = 10
+ fork = 1
+ failOnError = true
+ resultFormat = 'JSON'
+ // Allow to run single benchmark class like:
+ // ./gradlew -PjmhIncludeSingleClass=StatsTraceContextBenchmark clean :grpc-core:jmh
+ 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
+
+ uploadArchives {
+ repositories {
+ mavenDeployer {
+ beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
+
+ def configureAuth = {
+ if (rootProject.hasProperty('ossrhUsername') && rootProject.hasProperty('ossrhPassword')) {
+ authentication(userName:rootProject.ossrhUsername, password: rootProject.ossrhPassword)
+ }
+ }
+
+ repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/", configureAuth)
+
+ snapshotRepository(url: "https://oss.sonatype.org/content/repositories/snapshots/", configureAuth)
+
+ pom.project {
+ name "OpenCensus"
+ packaging 'jar'
+ description project.description
+ url 'https://github.com/census-instrumentation/opencensus-java'
+
+ scm {
+ connection 'scm:svn:https://github.com/census-instrumentation/opencensus-java'
+ developerConnection 'scm:git:git@github.com/census-instrumentation/opencensus-java'
+ url 'https://github.com/census-instrumentation/opencensus-java'
+ }
+
+ licenses {
+ license {
+ name 'The Apache License, Version 2.0'
+ url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
+ }
+ }
+
+ developers {
+ developer {
+ id 'io.opencensus'
+ name 'OpenCensus Contributors'
+ email 'census-developers@googlegroups.com'
+ url 'opencensus.io'
+ // https://issues.gradle.org/browse/GRADLE-2719
+ organization = 'OpenCensus Authors'
+ organizationUrl 'https://www.opencensus.io'
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // Upload the following artifacts only:
+ uploadArchives.onlyIf {
+ name in ['opencensus-api',
+ 'opencensus-contrib-agent',
+ 'opencensus-contrib-appengine-standard-util',
+ 'opencensus-contrib-dropwizard',
+ 'opencensus-contrib-exemplar-util',
+ 'opencensus-contrib-grpc-metrics',
+ 'opencensus-contrib-grpc-util',
+ 'opencensus-contrib-http-util',
+ 'opencensus-contrib-log-correlation-log4j2',
+ 'opencensus-contrib-log-correlation-stackdriver',
+ 'opencensus-contrib-monitored-resource-util',
+ 'opencensus-contrib-spring',
+ 'opencensus-contrib-spring-sleuth-v1x',
+ 'opencensus-contrib-zpages',
+ 'opencensus-exporter-stats-prometheus',
+ 'opencensus-exporter-stats-signalfx',
+ 'opencensus-exporter-stats-stackdriver',
+ 'opencensus-exporter-trace-instana',
+ 'opencensus-exporter-trace-logging',
+ 'opencensus-exporter-trace-ocagent',
+ 'opencensus-exporter-trace-stackdriver',
+ 'opencensus-exporter-trace-zipkin',
+ 'opencensus-exporter-trace-jaeger',
+ 'opencensus-impl-core',
+ 'opencensus-impl-lite',
+ 'opencensus-impl',
+ 'opencensus-testing']
+ }
+
+ // At a test failure, log the stack trace to the console so that we don't
+ // have to open the HTML in a browser.
+ test {
+ testLogging {
+ exceptionFormat = 'full'
+ showExceptions true
+ showCauses true
+ showStackTraces true
+ }
+ maxHeapSize = '1500m'
+ }
+
+ if (useCheckerFramework) {
+ allprojects {
+ tasks.withType(JavaCompile).all { JavaCompile compile ->
+ compile.doFirst {
+ compile.options.compilerArgs += [
+ '-Xmaxerrs', '10000',
+ "-Xbootclasspath/p:${configurations.checkerFrameworkAnnotatedJDK.asPath}",
+ "-AskipDefs=\\.AutoValue_|^io.opencensus.contrib.appengine.standard.util.TraceIdProto\$|^io.opencensus.contrib.appengine.standard.util.TraceProto\$",
+ "-AinvariantArrays"
+ ]
+ options.fork = true
+ options.forkOptions.jvmArgs += ["-Xbootclasspath/p:${configurations.checkerFrameworkJavac.asPath}"]
+ }
+ }
+ }
+ }
+
+ // For projects that depend on gRPC during test execution, make sure to
+ // also configure ALPN if running on a platform (e.g. FreeBSD) that is not
+ // supported by io.netty:netty-tcnative-boringssl-static:jar. Also see:
+ // https://github.com/grpc/grpc-java/blob/master/SECURITY.md#tls-with-jdk-jetty-alpnnpn
+ if (project.name in ['opencensus-exporter-stats-stackdriver',
+ 'opencensus-exporter-trace-stackdriver']) {
+ def os = org.gradle.internal.os.OperatingSystem.current()
+ if (!os.isLinux() && !os.isWindows() && !os.isMacOsX()) {
+ configurations {
+ alpn
+ }
+ dependencies {
+ alpn 'org.mortbay.jetty.alpn:jetty-alpn-agent:2.0.7'
+ }
+ test {
+ jvmArgs "-javaagent:${configurations.alpn.asPath}"
+ }
+ }
+ }
+}