diff --git a/gradle/build.gradle b/gradle/build.gradle index 645505a82..c0dde73d5 100644 --- a/gradle/build.gradle +++ b/gradle/build.gradle @@ -19,8 +19,9 @@ allprojects { 'archaic-wrapper', // Checks for indirect dependencies with dynamic version spec. Best // practice calls for declaring them with specific versions. - 'undeclared-dependency' - // TODO(weiminyu): enable more dependency check + 'undeclared-dependency', + 'unused-dependency' + // TODO(weiminyu): enable more dependency checks ] } diff --git a/gradle/core/build.gradle b/gradle/core/build.gradle index 98ef87c2c..fe3a0cfb5 100644 --- a/gradle/core/build.gradle +++ b/gradle/core/build.gradle @@ -42,32 +42,41 @@ configurations { css jaxb soy + // Label for all dependencies inherited from Bazel build but not used in + // either compile or testRuntime. However, they may be needed at runtime. + // TODO(weiminyu): identify runtime dependencies and remove the rest. + maybe_runtime } - -// TODO(weiminyu): switch to api/implementation labels. -// Gradle has deprecated the compile/testCompile labels, but nebula-lint has -// not caught up. The plugin provides valuable dependency checks that we do not -// want to give up. -// See https://github.com/nebula-plugins/gradle-lint-plugin/issues/130 for -// issue status. +// Known issues: +// - The (test/)compile/runtime labels are deprecated. We continue using these +// labels due to nebula-lint. +// TODO(weiminyu): switch to api/implementation labels. +// See https://github.com/nebula-plugins/gradle-lint-plugin/issues/130 for +// issue status. +// - Nebula-lint's conflict between unused and undeclared dependency check. +// If an undeclared dependency is added, the unused-dependency check will flag +// it. For now we wrap affected dependency in gradleLint.ignore block. +// TODO(weiminyu): drop gradleLint.ignore block when issue is fixed. +// See https://github.com/nebula-plugins/gradle-lint-plugin/issues/181 for +// issue status. dependencies { compile 'com.beust:jcommander:1.48' compile 'com.fasterxml.jackson.core:jackson-core:2.8.5' compile 'com.fasterxml.jackson.core:jackson-annotations:2.8.0' compile 'com.fasterxml.jackson.core:jackson-databind:2.8.5' compile 'com.google.api-client:google-api-client:1.22.0' - compile 'com.google.api-client:google-api-client-appengine:1.22.0' - compile 'com.google.api-client:google-api-client-jackson2:1.20.0' + maybe_runtime 'com.google.api-client:google-api-client-appengine:1.22.0' + maybe_runtime 'com.google.api-client:google-api-client-jackson2:1.20.0' compile 'com.google.monitoring-client:metrics:1.0.4' compile 'com.google.monitoring-client:stackdriver:1.0.4' - compile 'com.google.api-client:google-api-client-java6:1.20.0' - compile 'com.google.api-client:google-api-client-servlet:1.22.0' + maybe_runtime 'com.google.api-client:google-api-client-java6:1.20.0' + maybe_runtime 'com.google.api-client:google-api-client-servlet:1.22.0' compile 'com.google.apis:google-api-services-admin-directory:directory_v1-rev72-1.22.0' compile 'com.google.apis:google-api-services-bigquery:v2-rev325-1.22.0' - compile 'com.google.apis:google-api-services-clouddebugger:v2-rev8-1.22.0' + maybe_runtime 'com.google.apis:google-api-services-clouddebugger:v2-rev8-1.22.0' compile 'com.google.apis:google-api-services-cloudkms:v1-rev12-1.22.0' - compile 'com.google.apis:google-api-services-cloudresourcemanager:v1-rev6-1.22.0' + maybe_runtime 'com.google.apis:google-api-services-cloudresourcemanager:v1-rev6-1.22.0' compile 'com.google.apis:google-api-services-dataflow:v1b3-rev196-1.22.0' compile 'com.google.apis:google-api-services-dns:v2beta1-rev6-1.22.0' compile 'com.google.apis:google-api-services-drive:v2-rev160-1.19.1' @@ -78,105 +87,117 @@ dependencies { // TODO(b/71631624): change appengine:appengine-api-1.0-sdk to // testCompileOnly after BillingEmailUtilsTest.java is fixed. compile 'com.google.appengine:appengine-api-1.0-sdk:1.9.48' - compile 'com.google.appengine:appengine-api-labs:1.9.48' - compile 'com.google.appengine:appengine-api-stubs:1.9.48' + maybe_runtime 'com.google.appengine:appengine-api-labs:1.9.48' + maybe_runtime 'com.google.appengine:appengine-api-stubs:1.9.48' + testCompile 'com.google.appengine:appengine-api-stubs:1.9.48' compile 'com.google.appengine.tools:appengine-gcs-client:0.6' compile 'com.google.appengine.tools:appengine-mapreduce:0.8.5' compile 'com.google.appengine.tools:appengine-pipeline:0.2.13' compile 'com.google.appengine:appengine-remote-api:1.9.48' - compile 'com.google.appengine:appengine-tools-sdk:1.9.48' - compile 'com.google.auth:google-auth-library-credentials:0.7.1' - compile 'com.google.auth:google-auth-library-oauth2-http:0.7.1' - compile 'com.google.auto:auto-common:0.8' - compile 'com.google.auto.factory:auto-factory:1.0-beta3' + maybe_runtime 'com.google.appengine:appengine-tools-sdk:1.9.48' + maybe_runtime 'com.google.auth:google-auth-library-credentials:0.7.1' + maybe_runtime 'com.google.auth:google-auth-library-oauth2-http:0.7.1' + maybe_runtime 'com.google.auto:auto-common:0.8' + maybe_runtime 'com.google.auto.factory:auto-factory:1.0-beta3' compile 'com.google.auto.value:auto-value-annotations:1.6.2' - compile 'com.google.cloud.bigdataoss:gcsio:1.4.5' - compile 'com.google.cloud.bigdataoss:util:1.4.5' + maybe_runtime 'com.google.cloud.bigdataoss:gcsio:1.4.5' + maybe_runtime 'com.google.cloud.bigdataoss:util:1.4.5' compile 'com.google.code.findbugs:jsr305:3.0.2' compile 'com.google.dagger:dagger:2.15' - compile 'com.google.dagger:dagger-producers:2.15' + maybe_runtime 'com.google.dagger:dagger-producers:2.15' compile 'com.google.errorprone:error_prone_annotations:2.3.1' - compile 'com.google.errorprone:javac-shaded:9-dev-r4023-3' + maybe_runtime 'com.google.errorprone:javac-shaded:9-dev-r4023-3' compile 'com.google.flogger:flogger:0.1' - compile 'com.google.flogger:flogger-system-backend:0.1' - compile 'com.google.gdata:core:1.47.1' - compile 'com.google.googlejavaformat:google-java-format:1.4' + runtime 'com.google.flogger:flogger-system-backend:0.1' + maybe_runtime 'com.google.gdata:core:1.47.1' + maybe_runtime 'com.google.googlejavaformat:google-java-format:1.4' compile 'com.google.guava:guava-jdk5:17.0' compile 'com.google.guava:guava:25.1-jre' - compile 'com.google.gwt:gwt-user:2.8.2' + gradleLint.ignore('unused-dependency') { + compile 'com.google.gwt:gwt-user:2.8.2' + } compile 'com.google.http-client:google-http-client:1.22.0' compile 'com.google.http-client:google-http-client-appengine:1.22.0' compile 'com.google.http-client:google-http-client-jackson2:1.22.0' compile 'com.google.oauth-client:google-oauth-client:1.22.0' - compile 'com.google.oauth-client:google-oauth-client-appengine:1.22.0' + maybe_runtime 'com.google.oauth-client:google-oauth-client-appengine:1.22.0' compile 'com.google.oauth-client:google-oauth-client-java6:1.22.0' compile 'com.google.oauth-client:google-oauth-client-jetty:1.22.0' - compile 'com.google.oauth-client:google-oauth-client-servlet:1.22.0' - compile 'com.google.protobuf:protobuf-java:2.6.0' + maybe_runtime 'com.google.oauth-client:google-oauth-client-servlet:1.22.0' + maybe_runtime 'com.google.protobuf:protobuf-java:2.6.0' compile 'com.google.re2j:re2j:1.1' compile 'com.google.template:soy:2018-03-14' - compile 'com.googlecode.charts4j:charts4j:1.3' + maybe_runtime 'com.googlecode.charts4j:charts4j:1.3' compile 'com.googlecode.json-simple:json-simple:1.1.1' compile 'com.ibm.icu:icu4j:57.1' compile 'com.jcraft:jsch:0.1.53' - compile 'com.jcraft:jzlib:1.1.3' - compile 'com.squareup:javapoet:1.8.0' - compile 'com.squareup:javawriter:2.5.1' - compile 'com.sun.activation:javax.activation:1.2.0' - compile 'com.thoughtworks.paranamer:paranamer:2.7' - compile 'commons-codec:commons-codec:1.6' - compile 'commons-logging:commons-logging:1.1.1' + maybe_runtime 'com.jcraft:jzlib:1.1.3' + maybe_runtime 'com.squareup:javapoet:1.8.0' + maybe_runtime 'com.squareup:javawriter:2.5.1' + maybe_runtime 'com.sun.activation:javax.activation:1.2.0' + maybe_runtime 'com.thoughtworks.paranamer:paranamer:2.7' + maybe_runtime 'commons-codec:commons-codec:1.6' + maybe_runtime 'commons-logging:commons-logging:1.1.1' compile 'dnsjava:dnsjava:2.1.7' compile 'io.netty:netty-buffer:4.1.28.Final' compile 'io.netty:netty-codec:4.1.28.Final' compile 'io.netty:netty-codec-http:4.1.28.Final' compile 'io.netty:netty-common:4.1.28.Final' compile 'io.netty:netty-handler:4.1.28.Final' - compile 'io.netty:netty-resolver:4.1.28.Final' - compile 'io.netty:netty-tcnative:2.0.12.Final' - compile 'io.netty:netty-tcnative-boringssl-static:2.0.12.Final' + maybe_runtime 'io.netty:netty-resolver:4.1.28.Final' + maybe_runtime 'io.netty:netty-tcnative:2.0.12.Final' + maybe_runtime 'io.netty:netty-tcnative-boringssl-static:2.0.12.Final' compile 'io.netty:netty-transport:4.1.28.Final' - compile 'it.unimi.dsi:fastutil:6.5.16' - compile 'javax.annotation:jsr250-api:1.0' + maybe_runtime 'it.unimi.dsi:fastutil:6.5.16' + maybe_runtime 'javax.annotation:jsr250-api:1.0' + testCompile 'javax.annotation:jsr250-api:1.0' compile 'javax.inject:javax.inject:1' compile 'javax.mail:mail:1.4' compile 'javax.servlet:servlet-api:2.5' compile 'javax.xml.bind:jaxb-api:2.3.0' - compile 'javax.xml.soap:javax.xml.soap-api:1.4.0' + maybe_runtime 'javax.xml.soap:javax.xml.soap-api:1.4.0' compile 'jline:jline:1.0' compile 'joda-time:joda-time:2.3' compile 'org.apache.avro:avro:1.8.2' - compile 'org.apache.beam:beam-runners-direct-java:2.2.0' + maybe_runtime 'org.apache.beam:beam-runners-direct-java:2.2.0' + testCompile 'org.apache.beam:beam-runners-direct-java:2.2.0' compile 'org.apache.beam:beam-runners-google-cloud-dataflow-java:2.1.0' - compile 'org.apache.beam:beam-sdks-common-runner-api:2.1.0' + maybe_runtime 'org.apache.beam:beam-sdks-common-runner-api:2.1.0' compile 'org.apache.beam:beam-sdks-java-core:2.2.0' compile 'org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.1.0' compile 'org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.2.0' - compile 'org.apache.commons:commons-compress:1.8.1' - compile 'org.apache.ftpserver:ftplet-api:1.0.6' - compile 'org.apache.ftpserver:ftpserver-core:1.0.6' + maybe_runtime 'org.apache.commons:commons-compress:1.8.1' + maybe_runtime 'org.apache.ftpserver:ftplet-api:1.0.6' + testCompile 'org.apache.ftpserver:ftplet-api:1.0.6' + maybe_runtime 'org.apache.ftpserver:ftpserver-core:1.0.6' + testCompile 'org.apache.ftpserver:ftpserver-core:1.0.6' compile 'org.apache.httpcomponents:httpclient:4.5.2' compile 'org.apache.httpcomponents:httpcore:4.4.4' - compile 'org.apache.mina:mina-core:2.0.4' - compile 'org.apache.sshd:sshd-core:2.0.0' - compile 'org.apache.sshd:sshd-scp:2.0.0' - compile 'org.apache.sshd:sshd-sftp:2.0.0' + maybe_runtime 'org.apache.mina:mina-core:2.0.4' + maybe_runtime 'org.apache.sshd:sshd-core:2.0.0' + testCompile 'org.apache.sshd:sshd-core:2.0.0' + maybe_runtime 'org.apache.sshd:sshd-scp:2.0.0' + testCompile 'org.apache.sshd:sshd-scp:2.0.0' + maybe_runtime 'org.apache.sshd:sshd-sftp:2.0.0' + testCompile 'org.apache.sshd:sshd-sftp:2.0.0' compile 'org.apache.tomcat:servlet-api:6.0.45' - compile 'org.apache.tomcat:tomcat-annotations-api:8.0.5' + maybe_runtime 'org.apache.tomcat:tomcat-annotations-api:8.0.5' + testCompile 'org.apache.tomcat:tomcat-annotations-api:8.0.5' compile 'org.bouncycastle:bcpg-jdk15on:1.52' compile 'org.bouncycastle:bcpkix-jdk15on:1.52' compile 'org.bouncycastle:bcprov-jdk15on:1.52' - compile 'org.codehaus.jackson:jackson-core-asl:1.9.13' - compile 'org.codehaus.jackson:jackson-mapper-asl:1.9.13' + maybe_runtime 'org.codehaus.jackson:jackson-core-asl:1.9.13' + maybe_runtime 'org.codehaus.jackson:jackson-mapper-asl:1.9.13' compile 'org.joda:joda-money:0.10.0' compile 'org.json:json:20160810' - compile 'org.khronos:opengl-api:gl1.1-android-2.1_r1' - compile 'org.mortbay.jetty:jetty:6.1.26' + maybe_runtime 'org.khronos:opengl-api:gl1.1-android-2.1_r1' + maybe_runtime 'org.mortbay.jetty:jetty:6.1.26' + testCompile 'org.mortbay.jetty:jetty:6.1.26' compile 'org.mortbay.jetty:servlet-api:2.5-20081211' - compile 'org.mortbay.jetty:jetty-util:6.1.26' - compile 'org.slf4j:slf4j-api:1.7.16' - compile 'org.tukaani:xz:1.5' - compile 'org.xerial.snappy:snappy-java:1.1.4-M3' + maybe_runtime 'org.mortbay.jetty:jetty-util:6.1.26' + maybe_runtime 'org.slf4j:slf4j-api:1.7.16' + maybe_runtime 'org.tukaani:xz:1.5' + maybe_runtime 'org.xerial.snappy:snappy-java:1.1.4-M3' compile 'org.yaml:snakeyaml:1.17' compile 'xerces:xmlParserAPIs:2.6.2' compile 'xpp3:xpp3:1.1.4c' @@ -186,7 +207,9 @@ dependencies { // Include auto-value in compile until nebula-lint understands // annotationProcessor - compile 'com.google.auto.value:auto-value:1.6.2' + gradleLint.ignore('unused-dependency') { + compile 'com.google.auto.value:auto-value:1.6.2' + } annotationProcessor 'com.google.auto.value:auto-value:1.6.2' testAnnotationProcessor 'com.google.auto.value:auto-value:1.6.2' annotationProcessor 'com.google.dagger:dagger-compiler:2.15' @@ -204,7 +227,6 @@ dependencies { testCompile 'org.hamcrest:hamcrest-library:1.3' testCompile 'junit:junit:4.12' testCompile 'org.mockito:mockito-all:1.9.5' - testCompile 'org.slf4j:slf4j-simple:1.7.16' // Not needed by Bazel // Indirect dependency found by undeclared-dependency check. Such // dependencies should go after all other compile and testCompile