description = 'gRPC: Core'

dependencies {
    compile project(':grpc-context'),
            libraries.gson,
            libraries.errorprone,
            libraries.jsr305,
            libraries.animalsniffer_annotations
    compile (libraries.guava) {
        // prefer 2.2.0 from libraries instead of 2.1.3
        exclude group: 'com.google.errorprone', module: 'error_prone_annotations'
        // prefer 3.0.2 from libraries instead of 3.0.1
        exclude group: 'com.google.code.findbugs', module: 'jsr305'
        // prefer 1.17 from libraries instead of 1.14
        exclude group: 'org.codehaus.mojo', module: 'animal-sniffer-annotations'
    }
    compile (libraries.opencensus_api) {
        // prefer 3.0.2 from libraries instead of 3.0.1
        exclude group: 'com.google.code.findbugs', module: 'jsr305'
        // prefer 20.0 from libraries instead of 19.0
        exclude group: 'com.google.guava', module: 'guava'
        // we'll always be more up-to-date
        exclude group: 'io.grpc', module: 'grpc-context'
    }
    compile (libraries.opencensus_contrib_grpc_metrics) {
        // prefer 3.0.2 from libraries instead of 3.0.1
        exclude group: 'com.google.code.findbugs', module: 'jsr305'
        // we'll always be more up-to-date
        exclude group: 'io.grpc', module: 'grpc-context'
        // prefer 20.0 from libraries instead of 19.0
        exclude group: 'com.google.guava', module: 'guava'
    }

    testCompile project(':grpc-context').sourceSets.test.output,
            project(':grpc-testing'),
            project(':grpc-grpclb'),
            libraries.guava_testlib

    signature "org.codehaus.mojo.signature:java17:1.0@signature"
    signature "net.sf.androidscents.signature:android-api-level-14:4.0_r4@signature"
}

javadoc {
    // We want io.grpc.Internal, but not io.grpc.Internal*
    exclude 'io/grpc/Internal?*.java'
    exclude 'io/grpc/internal/**'
}

animalsniffer {
    // Don't check sourceSets.jmh
    sourceSets = [
        sourceSets.main,
        sourceSets.test
    ]
}
