description = 'gRPC: Core'

dependencies {
    compile project(':grpc-context'),
            libraries.gson,
            libraries.errorprone,
            libraries.jsr305,
            libraries.android_annotations,
            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
    ]
}
