Giter Site home page Giter Site logo

nebula-plugins / gradle-lint-plugin Goto Github PK

View Code? Open in Web Editor NEW
745.0 29.0 88.0 2.52 MB

A pluggable and configurable linter tool for identifying and reporting on patterns of misuse or deprecations in Gradle scripts.

License: Apache License 2.0

Groovy 97.40% Java 2.00% Kotlin 0.60%
gradle lint linter

gradle-lint-plugin's Introduction

Gradle Lint Plugin

Support Status Gradle Plugin Portal Maven Central Build Apache 2.0

Purpose

The Gradle Lint plugin is a pluggable and configurable linter tool for identifying and reporting on patterns of misuse or deprecations in Gradle scripts and related files. It is inspired by the excellent ESLint tool for Javascript and by the formatting in NPM's eslint-friendly-formatter package.

It assists a centralized build tools team in gently introducing and maintaining a standard build script style across their organization.

Getting Started

Read the full documentation.

To apply this plugin, please get the latest version from the Gradle plugin portal and add the following to build.gradle:

buildscript { repositories { mavenCentral() } }
plugins {
  id 'nebula.lint' version '<latest version from the Gradle plugin portal>'
}

Important: For now, in a multi-module build you must apply lint to the root project, at a minimum.

Alternatively:

buildscript {
  repositories { mavenCentral() }
  dependencies {
    classpath 'com.netflix.nebula:gradle-lint-plugin:latest.release'
  }
}


apply plugin: 'nebula.lint'

Define which rules you would like to lint against:

gradleLint.rules = ['all-dependency'] // add as many rules here as you'd like

For an enterprise build, we recommend defining the lint rules in a init.gradle script or in a gradle script that is included via the Gradle apply from mechanism.

For multimodule projects, we recommend applying the plugin in an allprojects block:

allprojects {
  apply plugin: 'nebula.lint'
  gradleLint.rules = ['all-dependency'] // add as many rules here as you'd like
}

api/implementation support

v15.0.0 introduced api/implementation configuration support.

This allows to show warnings around api/implementation configurations

Since we need to do some major work to keep track of declared configurations and then replace code with the proper configuration, we decided to just show warnings for now.

This work includes finding dependency information for non resolvable configurations so we look into the parents

If gradle/gradle#11106 lands some day, we could definitely enhance this experience.

While it is great to have automatic fix, not having it is worse. So for now warning about this with the same detail as before is much better than a broken experience with new gradle configurations

Warning

Gradle Lint Plugin currently doesn't support:

  • kotlin build scripts. Please, switch to groovy build script if you want to use linting. #166

License

Copyright 2015-2018-2019 Netflix, Inc.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

gradle-lint-plugin's People

Contributors

boazj avatar bognari avatar chali avatar danielthomas avatar dnlbyl avatar emccallum avatar felipefzdz avatar jkschneider avatar jmcampanini avatar ligi avatar mattwiersma avatar michaelruocco avatar musketyr avatar nadavc avatar odysseuslives avatar prestontim avatar remy-tiitre avatar robbadler avatar rpalcolea avatar rspieldenner avatar sghill avatar tir38 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gradle-lint-plugin's Issues

Duplicate Warnings for Extended Configurations

When one configuration extends from another and a direct dependency is undeclared in the super configuration, the same warning is shown twice:

warning   unused-dependency                  one or more classes in org.hamcrest:hamcrest-core:1.3 are required by your code directly

Manually fixing this by adding a dependency on hamcrest to the super configuration eliminates both warnings, but running fixGradleLint adds the dependency to both configurations.

Here is an example project that reproduces this.

Artifactory and internal POM

I am not really sure this is an 'issue', but i find that when i upload the gradle-lint jar into my Artifactory instance, it always pre-populates it with commons-lang:commons-lang:2.6, so i am always having to manually enter the group and artifact ids. It seems to work fine when i import the actual gradle-lint pom.

I am no artifactory expert so i can very well be doing something wrong ....

Sean

Handling providedCompile/Runtime

I noticed that lint is flagging my providedCompile dependencies as needing to move to the compile configuration but they are technically extensions of compile (if i understand gradle's configuration bits correctly).

warning   unused-dependency                  this dependency should be moved to configuration compile
build.gradle:152
providedCompile ('javax.servlet:javax.servlet-api:3.+') {transitive = false}

If you need any output please let me know.

Thanks in advance.

Sean

fixGradleLint message confusing for dependency violations

For fixGradleLint to be effective for dependency rules, you have to re-run the same build for the violations to be fixed. We should output the full start parameters with --rerun-tasks prepended and fixGradleLint appended so users know the exact tasks to run to apply the fixes inline.

ignoreFailures in GradleLintReportTask is ignored

there is currently no way to let the GradleLintReportTask fail if violations found. I'd like to have the report generated but fail the task. otherwise I have no way to indicate violations have been found apart from scanning the log output.

Not compatible with Gradle 3?


* What went wrong:
A problem occurred evaluating root project 'cas-server'.
> Failed to apply plugin [id 'nebula.lint']
   > Could not create task of type 'FixGradleLintTask'.

Running with Gradle 3. The plugin in 2.14.x works just fine.

Lint plugin is not working with Dependency recommender

Hi

first of all, thanks the effort with lint plugin. It's definitely a great and helpful plugin.

I am trying to use nebula.dependency-recommender in conjunction with nebula.lint. For nebula.lint plugin., the configuration is very straightforward

apply plugin: 'nebula.lint'

gradleLint.rules += 'all-dependency'

and for nebula.dependency-recommender

apply plugin: 'nebula.dependency-recommender'

dependencyRecommendations {
propertiesFile file: rootProject.file('dependency-versions.properties')
}

When I do not specify version of a dependency in build script, like

compile junit:junit

"unused-dependency" rule does not work. As soon as I add it like

compile junit:junit:3.4

it starts to work and I get a message that there is unused dependency. Note that lintGradle task is executed everytime.

Any ideas?

Thanks!
Martin

Build fails while checking gradle file

I setup my gradle project to pull the lint plugin in and ran the lintGradle task and got this response:

:lintGradle FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':lintGradle'.
> fromIndex(141) > toIndex(140)

I setup the plugin to pull in both 0.22 and 0.23 and used the "all-dependency" rule. If i only use the dependency-* rules it works fine.

I did have to add the jgit & commons-lang packages to the class path

Thanks in advance,
Sean Stallbaum

GenerateGradleLintReport fails

I just saw the report task and thought i would give it a shot hoping that it is something i can use to justify the corp wide adoption of the plugin, but when ran it I got this:

:generateGradleLintReport FAILED
:lintGradle

This project contains lint violations. A complete listing of the violations follows. 
Because none were serious, the build's overall status was unaffected.

.
.
.

warning   unused-dependency                  this dependency is unused and can be removed
build.gradle:189
compile ('org.ini4j:ini4j:0.5.4') {transitive = false}

โœ– build.gradle: 19 problems (0 errors, 19 warnings)

To apply fixes automatically, run fixGradleLint, review, and commit the changes.


FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':generateGradleLintReport'.
> Not supported on virtual results

java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing

When using version 0.30.4 via

plugins {
    id "java"
    id "nebula.lint" version "0.30.4"
}

and

gradleLint.rules = ['all-dependency']

in my own project, I get the error below. I tried adding hamcrest dependency to the buildscript classpath but that didn't work. This happens on Gradle versions 2.8, 2.9, 2.13 and 2.14-rc-4.

:lintGradleError from [com.netflix.nebula.lint.rule.GradleLintRule$1] processing source file [null]
 FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':lintGradle'.
> org/hamcrest/SelfDescribing

* Try:
Run with --info or --debug option to get more log output.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':lintGradle'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
    at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:66)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:203)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:185)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:66)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:50)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:25)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:110)
    at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
    at org.gradle.execution.DefaultBuildExecuter.access$000(DefaultBuildExecuter.java:23)
    at org.gradle.execution.DefaultBuildExecuter$1.proceed(DefaultBuildExecuter.java:43)
    at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:30)
    at org.gradle.initialization.DefaultGradleLauncher$4.run(DefaultGradleLauncher.java:153)
    at org.gradle.internal.Factories$1.create(Factories.java:22)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:53)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:150)
    at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:32)
    at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:98)
    at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:92)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:63)
    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:92)
    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:83)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:99)
    at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:48)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:30)
    at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:81)
    at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:46)
    at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:52)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72)
    at org.gradle.util.Swapper.swap(Swapper.java:38)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.health.DaemonHealthTracker.execute(DaemonHealthTracker.java:47)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:60)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:72)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.health.HintGCAfterBuild.execute(HintGCAfterBuild.java:41)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
    at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:237)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
    at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
Caused by: java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
    at com.netflix.nebula.lint.rule.dependency.ClassHierarchyUtils.typeHierarchy(ClassHierarchyUtils.groovy:32)
    at com.netflix.nebula.lint.rule.dependency.ClassHierarchyUtils$typeHierarchy.call(Unknown Source)
    at com.netflix.nebula.lint.rule.dependency.DependencyClassVisitor.visit(DependencyClassVisitor.groovy:88)
    at org.objectweb.asm.ClassReader.accept(Unknown Source)
    at org.objectweb.asm.ClassReader.accept(Unknown Source)
    at org.objectweb.asm.ClassReader$accept.call(Unknown Source)
    at com.netflix.nebula.lint.rule.dependency.DependencyService$2.visitFile(DependencyService.groovy:143)
    at com.netflix.nebula.lint.rule.dependency.DependencyService$2.visitFile(DependencyService.groovy)
    at java_nio_file_Files$walkFileTree.call(Unknown Source)
    at com.netflix.nebula.lint.rule.dependency.DependencyService.memoizedMethodPriv$classReferencesSourceSet(DependencyService.groovy:136)
    at com.netflix.nebula.lint.rule.dependency.DependencyService$_closure2.doCall(DependencyService.groovy)
    at com.netflix.nebula.lint.rule.dependency.DependencyService.classReferences(DependencyService.groovy)
    at com.netflix.nebula.lint.rule.dependency.DependencyService.memoizedMethodPriv$usedDependenciesString(DependencyService.groovy:240)
    at com.netflix.nebula.lint.rule.dependency.DependencyService$_closure6.doCall(DependencyService.groovy)
    at com.netflix.nebula.lint.rule.dependency.DependencyService.usedDependencies(DependencyService.groovy)
    at com.netflix.nebula.lint.rule.dependency.DependencyService$usedDependencies$7.call(Unknown Source)
    at com.netflix.nebula.lint.rule.dependency.UnusedDependencyRule$_visitGradleDependency_closure1.doCall(UnusedDependencyRule.groovy:52)
    at com.netflix.nebula.lint.rule.dependency.UnusedDependencyRule.visitGradleDependency(UnusedDependencyRule.groovy:51)
    at com.netflix.nebula.lint.rule.GradleLintRule.this$dist$invoke$4(GradleLintRule.groovy)
    at com.netflix.nebula.lint.rule.GradleLintRule$1.methodMissing(GradleLintRule.groovy)
    at com.netflix.nebula.lint.rule.GradleLintRule$1.this$dist$invoke$3(GradleLintRule.groovy)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$2.methodMissing(GradleLintRule.groovy)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$2.visitMethodCallInDependencies(GradleLintRule.groovy:384)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$2.visitMethodCallExpression(GradleLintRule.groovy:207)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$2.super$3$visitExpressionStatement(GradleLintRule.groovy)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$2.visitExpressionStatement(GradleLintRule.groovy:344)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$2.super$2$visitMethodCallExpression(GradleLintRule.groovy)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$2.visitMethodCallExpression(GradleLintRule.groovy:214)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$2.super$3$visitExpressionStatement(GradleLintRule.groovy)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$2.visitExpressionStatement(GradleLintRule.groovy:344)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$3$_visitConstructorOrMethod_closure11.doCall(GradleLintRule.groovy:464)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$3.both(GradleLintRule.groovy:408)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$3$both.callCurrent(Unknown Source)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$3.visitConstructorOrMethod(GradleLintRule.groovy:464)
    at com.netflix.nebula.lint.org.codenarc.rule.AbstractAstVisitor.visitMethod(AbstractAstVisitor.java:171)
    at com.netflix.nebula.lint.org.codenarc.rule.AbstractAstVisitor.visitClass(AbstractAstVisitor.java:148)
    at com.netflix.nebula.lint.org.codenarc.rule.AbstractAstVisitorRule.applyTo(AbstractAstVisitorRule.java:97)
    at com.netflix.nebula.lint.org.codenarc.rule.AbstractRule.applyTo(AbstractRule.java:142)
    at com.netflix.nebula.lint.org.codenarc.rule.Rule$applyTo$0.call(Unknown Source)
    at com.netflix.nebula.lint.rule.GradleLintRule.applyTo(GradleLintRule.groovy:134)
    at com.netflix.nebula.lint.org.codenarc.rule.Rule$applyTo$0.call(Unknown Source)
    at com.netflix.nebula.lint.org.codenarc.rule.Rule$applyTo$0.call(Unknown Source)
    at com.netflix.nebula.lint.org.codenarc.analyzer.AbstractSourceAnalyzer.collectViolations(AbstractSourceAnalyzer.groovy:40)
    at com.netflix.nebula.lint.plugin.LintService$ReportableAnalyzer.analyze(LintService.groovy:48)
    at com.netflix.nebula.lint.plugin.LintService$ReportableAnalyzer$analyze.call(Unknown Source)
    at com.netflix.nebula.lint.plugin.LintService$_lint_closure3.doCall(LintService.groovy:96)
    at com.netflix.nebula.lint.plugin.LintService.lint(LintService.groovy:93)
    at com.netflix.nebula.lint.plugin.LintService$lint.call(Unknown Source)
    at com.netflix.nebula.lint.plugin.LintGradleTask.lint(LintGradleTask.groovy:41)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:228)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:221)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:210)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:621)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:604)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
    ... 68 more
Caused by: java.lang.ClassNotFoundException: org.hamcrest.SelfDescribing
    ... 125 more


BUILD FAILED

Total time: 2.088 secs

Dependency fixes may affect wrong dependencies block

Have a build script that has dependencies from an apply from and buildscript dependencies, and the fixes for unused-dependencies are appended to the dependencies block within buildscript:

buildscript {
    repositories {
        jcenter()
        maven { url 'https://dl.bintray.com/kotlin/kotlin-eap-1.1' }
    }
    dependencies {
        classpath 'io.spring.gradle:dependency-management-plugin:0.6.0.RELEASE'
        classpath 'com.netflix.nebula:nebula-kotlin-plugin:1.1.0-M01-5'
    }
}

apply plugin: 'nebula.dependency-lock'
apply plugin: 'nebula.integtest'
apply plugin: 'nebula.kotlin'
apply plugin: 'nebula.nebula-release'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'war'

apply from: 'gradle/dependencies.gradle'
apply from: 'gradle/lint.gradle'
apply from: 'gradle/package.gradle'
apply from: 'gradle/test.gradle'

After:

buildscript {
    repositories {
        jcenter()
        maven { url 'https://dl.bintray.com/kotlin/kotlin-eap-1.1' }
    }
    dependencies {
       compile 'org.apache.httpcomponents:httpclient:4.5'
       compile 'com.fasterxml.jackson.core:jackson-annotations:2.8.1'
       compile 'org.apache.kafka:kafka-clients:0.9.0.1'
       compile 'org.springframework:spring-web:4.3.2.RELEASE'
       compile 'org.springframework.boot:spring-boot:1.4.0.RELEASE'
       compile 'com.fasterxml.jackson.core:jackson-databind:2.8.1'
       compile 'com.netflix.spectator:spectator-api:0.40.0'
       compile 'org.springframework:spring-context:4.3.2.RELEASE'
       compile 'com.amazonaws:aws-java-sdk-s3:1.11.6'
       compile 'org.springframework:spring-beans:4.3.2.RELEASE'
       compile 'com.fasterxml.jackson.core:jackson-core:2.8.1'
       compile 'org.apache.tomcat.embed:tomcat-embed-core:8.5.4'
       compile 'javax.inject:javax.inject:1'
       compile 'com.amazonaws:aws-java-sdk-core:1.11.6'
       compile 'org.jetbrains.kotlin:kotlin-runtime:1.1-M01'
       compile 'com.netflix.feign:feign-core:8.16.2'
       compile 'com.netflix.feign:feign-slf4j:8.16.2'
       compile 'org.apache.httpcomponents:httpcore:4.4.1'
       compile 'org.springframework.cloud:spring-cloud-netflix-eureka-client:1.1.5.RELEASE'
       compile 'org.springframework.cloud:spring-cloud-aws-messaging:1.1.0.RELEASE'
       compile 'org.jetbrains.kotlin:kotlin-stdlib:1.1-M01'
       compile 'org.springframework:spring-core:4.3.2.RELEASE'
       compile 'org.springframework:spring-webmvc:4.3.2.RELEASE'
       compile 'org.springframework.boot:spring-boot-autoconfigure:1.4.0.RELEASE'
        classpath 'io.spring.gradle:dependency-management-plugin:0.6.0.RELEASE'
        classpath 'com.netflix.nebula:nebula-kotlin-plugin:1.1.0-M01-5'
    }
}

Of course, it'd also be awesome if lint considered apply from files too. And if these were ordered :)

Tasks don't trickle down to subprojects?

Hi,
thanks for sharing this work. Not sure what I'm doing wrong but I'm running into trouble when trying to apply to multimodule project:
topmost build.gradle:

...
allprojects {
  apply plugin: 'nebula.lint'
  gradleLint.rules = ['dependency-parentheses', 'dependency-tuple']
}
...

But when I'm trying to get the report:

> gradle generateGradleLintReport
> Could not determine the dependencies of task ':subproject_name:generateGradleLintReport'.
> Task with path 'lintGradle' not found in project subproject_name

Allow configuration of lintGradle task invocation behaviour

sorry for the maybe confusing title but I'm not sure how to phrase it better. We want to use the lint plugin in our project but we want to specify explicitly when to run the lint task. E.g. we only want it to run with our sanityCheck task.

The current default behaviour of always running lintGradle at the end of the build is kind of to much as it adds significant build time to all of our builds. (e.g. resulting in a 2s build to run now 15s with lintPlugin applied. We worked around this by only applying the lint plugin when sanityCheck is explicitly triggered but that is a workaround I'd like to get rid of.

What about having a flag in the lint extension to disable / enable auto applying the lintGradle task?

Dependency cycles cause infinite recursion in DependencyReport

Offending block of code at DependencyReport, line 92:

def transitiveDependencies = new HashSet()
def recurseTransitives
recurseTransitives = { Collection<ResolvedDependency> ds ->
   ds.each { d ->
      transitiveDependencies.add(d)
      recurseTransitives(d.children)
   }
}
recurseTransitives(firstLevelDependencies*.children.flatten() as Collection<ResolvedDependency>)

Wrong warning for duplicate-dependency-class

Have a simple Java project.
Use following dependencies

    compile 'org.hornetq:hornetq-core-client:2.4.5.Final'
    compile 'org.hornetq:hornetq-commons:2.4.5.Final'

Getting following warning:

warning   duplicate-dependency-class         org.hornetq:hornetq-commons:2.4.5.Final in configuration 'compile' has 2 classes duplicated by org.hornetq:hornetq-core-client:2.4.5.Final

If I inspect the libraries there are no duplicate classes.

NPE from overridden dependency version rule

On, Gradle 2.14.1:

    Caused by: java.lang.NullPointerException
            at org.gradle.api.internal.artifacts.ivyservice.ivyresolve.strategy.DefaultVersionSelectorScheme.parseSelector(DefaultVersionSelectorScheme.java:27)
            at org.gradle.api.internal.artifacts.ivyservice.ivyresolve.strategy.VersionSelectorScheme$parseSelector.call(Unknown Source)
            at org.gradle.api.internal.artifacts.ivyservice.ivyresolve.strategy.VersionSelectorScheme$parseSelector.call(Unknown Source)
            at com.netflix.nebula.lint.rule.dependency.OverriddenDependencyVersionRule.visitGradleDependency(OverriddenDependencyVersionRule.groovy:35)
            at com.netflix.nebula.lint.rule.GradleLintRule.this$dist$invoke$4(GradleLintRule.groovy)
            at com.netflix.nebula.lint.rule.GradleLintRule$1.methodMissing(GradleLintRule.groovy)
            at com.netflix.nebula.lint.rule.GradleLintRule$1.this$dist$invoke$3(GradleLintRule.groovy)
            at com.netflix.nebula.lint.rule.GradleLintRule$1$2.methodMissing(GradleLintRule.groovy)
            at com.netflix.nebula.lint.rule.GradleLintRule$1$2.visitMethodCallInDependencies(GradleLintRule.groovy:398)
            at com.netflix.nebula.lint.rule.GradleLintRule$1$2.visitMethodCallExpression(GradleLintRule.groovy:208)
            at com.netflix.nebula.lint.rule.GradleLintRule$1$2.super$3$visitExpressionStatement(GradleLintRule.groovy)
            at com.netflix.nebula.lint.rule.GradleLintRule$1$2.visitExpressionStatement(GradleLintRule.groovy:345)
            at com.netflix.nebula.lint.rule.GradleLintRule$1$2.super$2$visitMethodCallExpression(GradleLintRule.groovy)
            at com.netflix.nebula.lint.rule.GradleLintRule$1$2.visitMethodCallExpression(GradleLintRule.groovy:215)
            at com.netflix.nebula.lint.rule.GradleLintRule$1$2.super$3$visitExpressionStatement(GradleLintRule.groovy)
            at com.netflix.nebula.lint.rule.GradleLintRule$1$2.visitExpressionStatement(GradleLintRule.groovy:345)
            at com.netflix.nebula.lint.rule.GradleLintRule$1$3$_visitConstructorOrMethod_closure11.doCall(GradleLintRule.groovy:475)
            at com.netflix.nebula.lint.rule.GradleLintRule$1$3.both(GradleLintRule.groovy:419)
            at com.netflix.nebula.lint.rule.GradleLintRule$1$3$both.callCurrent(Unknown Source)
            at com.netflix.nebula.lint.rule.GradleLintRule$1$3.visitConstructorOrMethod(GradleLintRule.groovy:475)
            at com.netflix.nebula.lint.org.codenarc.rule.AbstractAstVisitor.visitMethod(AbstractAstVisitor.java:171)
            at com.netflix.nebula.lint.org.codenarc.rule.AbstractAstVisitor.visitClass(AbstractAstVisitor.java:148)
            at com.netflix.nebula.lint.org.codenarc.rule.AbstractAstVisitorRule.applyTo(AbstractAstVisitorRule.java:97)
            at com.netflix.nebula.lint.org.codenarc.rule.AbstractRule.applyTo(AbstractRule.java:142)
            at com.netflix.nebula.lint.org.codenarc.rule.Rule$applyTo$0.call(Unknown Source)
            at com.netflix.nebula.lint.rule.GradleLintRule.applyTo(GradleLintRule.groovy:135)
            at com.netflix.nebula.lint.org.codenarc.rule.Rule$applyTo$0.call(Unknown Source)
            at com.netflix.nebula.lint.org.codenarc.rule.Rule$applyTo$0.call(Unknown Source)
            at com.netflix.nebula.lint.org.codenarc.analyzer.AbstractSourceAnalyzer.collectViolations(AbstractSourceAnalyzer.groovy:40)
            at com.netflix.nebula.lint.plugin.LintService$ReportableAnalyzer.analyze(LintService.groovy:48)
            at com.netflix.nebula.lint.plugin.LintService$ReportableAnalyzer$analyze.call(Unknown Source)
            at com.netflix.nebula.lint.plugin.LintService$_lint_closure3.doCall(LintService.groovy:96)
            at com.netflix.nebula.lint.plugin.LintService.lint(LintService.groovy:93)
            at com.netflix.nebula.lint.plugin.LintService$lint.call(Unknown Source)
            at com.netflix.nebula.lint.plugin.LintGradleTask.lint(LintGradleTask.groovy:34)
            at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75)
            at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:228)
            at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:221)
            at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:210)
            at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:621)
            at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:604)
            at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
            at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
            ... 68 more

Undeclared Guava Dependency?

Unless I'm completely mistaken (which is certainly possible), there seems to be an undeclared dependency on Guava in DependencyService.groovy (stacktrace attached).

I ran into this when I was trying to add this plugin via an init script. When I add the plugin in my main build script, it seems to work because I already have (inadvertently) included Guava in my buildscript classpath.

:lintGradle
Error from [com.netflix.nebula.lint.rule.GradleLintRule$1] processing source file [null]
:lintGradle FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':lintGradle'.
> com/google/common/collect/Multimaps

* Try:
Run with --info or --debug option to get more log output.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':lintGradle'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
        at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:68)
        at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
        at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:52)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
        at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:203)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:185)
        at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:66)
        at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:50)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:25)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:110)
        at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37)
        at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
        at org.gradle.execution.DefaultBuildExecuter.access$000(DefaultBuildExecuter.java:23)
        at org.gradle.execution.DefaultBuildExecuter$1.proceed(DefaultBuildExecuter.java:43)
        at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
        at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
        at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:30)
        at org.gradle.initialization.DefaultGradleLauncher$4.run(DefaultGradleLauncher.java:154)
        at org.gradle.internal.Factories$1.create(Factories.java:22)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:52)
        at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:151)
        at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:32)
        at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:99)
        at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:93)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:62)
        at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:93)
        at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:82)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:94)
        at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
        at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:43)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:28)
        at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:81)
        at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:46)
        at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:51)
        at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:28)
        at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:43)
        at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:173)
        at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:241)
        at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:214)
        at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:35)
        at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24)
        at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:207)
        at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169)
        at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
        at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
        at org.gradle.launcher.Main.doAction(Main.java:33)
        at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:55)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:36)
        at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
        at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:30)
        at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:127)
        at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:56)
Caused by: java.lang.NoClassDefFoundError: com/google/common/collect/Multimaps
        at com.netflix.nebula.lint.rule.dependency.DependencyService.memoizedMethodPriv$artifactsByClassConfiguration(DependencyService.groovy:68)
        at com.netflix.nebula.lint.rule.dependency.DependencyService$_closure1.doCall(DependencyService.groovy)
        at com.netflix.nebula.lint.rule.dependency.DependencyService.artifactsByClass(DependencyService.groovy)
        at com.netflix.nebula.lint.rule.dependency.DependencyService$artifactsByClass$4.callCurrent(Unknown Source)
        at com.netflix.nebula.lint.rule.dependency.DependencyService.memoizedMethodPriv$classReferencesSourceSet(DependencyService.groovy:133)
        at com.netflix.nebula.lint.rule.dependency.DependencyService$_closure2.doCall(DependencyService.groovy)
        at com.netflix.nebula.lint.rule.dependency.DependencyService.classReferences(DependencyService.groovy)
        at com.netflix.nebula.lint.rule.dependency.DependencyService.memoizedMethodPriv$unusedDependenciesString(DependencyService.groovy:252)
        at com.netflix.nebula.lint.rule.dependency.DependencyService$_closure7.doCall(DependencyService.groovy)
        at com.netflix.nebula.lint.rule.dependency.DependencyService.unusedDependencies(DependencyService.groovy)
        at com.netflix.nebula.lint.rule.dependency.DependencyService$unusedDependencies$3.call(Unknown Source)
        at com.netflix.nebula.lint.rule.dependency.UnusedDependencyRule.visitGradleDependency(UnusedDependencyRule.groovy:47)
        at com.netflix.nebula.lint.rule.GradleLintRule.this$dist$invoke$4(GradleLintRule.groovy)
        at com.netflix.nebula.lint.rule.GradleLintRule$1.methodMissing(GradleLintRule.groovy)
        at com.netflix.nebula.lint.rule.GradleLintRule$1.this$dist$invoke$3(GradleLintRule.groovy)
        at com.netflix.nebula.lint.rule.GradleLintRule$1$2.methodMissing(GradleLintRule.groovy)
        at com.netflix.nebula.lint.rule.GradleLintRule$1$2.visitMethodCallInDependencies(GradleLintRule.groovy:321)
        at com.netflix.nebula.lint.rule.GradleLintRule$1$2.visitMethodCallExpression(GradleLintRule.groovy:206)
        at com.netflix.nebula.lint.rule.GradleLintRule$1$2.super$3$visitExpressionStatement(GradleLintRule.groovy)
        at com.netflix.nebula.lint.rule.GradleLintRule$1$2.visitExpressionStatement(GradleLintRule.groovy:281)
        at com.netflix.nebula.lint.rule.GradleLintRule$1$2.super$2$visitMethodCallExpression(GradleLintRule.groovy)
        at com.netflix.nebula.lint.rule.GradleLintRule$1$2.visitMethodCallExpression(GradleLintRule.groovy:213)
        at com.netflix.nebula.lint.rule.GradleLintRule$1$2.super$3$visitExpressionStatement(GradleLintRule.groovy)
        at com.netflix.nebula.lint.rule.GradleLintRule$1$2.visitExpressionStatement(GradleLintRule.groovy:281)
        at com.netflix.nebula.lint.rule.GradleLintRule$1$3$_visitConstructorOrMethod_closure11.doCall(GradleLintRule.groovy:401)
        at com.netflix.nebula.lint.rule.GradleLintRule$1$3.both(GradleLintRule.groovy:345)
        at com.netflix.nebula.lint.rule.GradleLintRule$1$3$both.callCurrent(Unknown Source)
        at com.netflix.nebula.lint.rule.GradleLintRule$1$3.visitConstructorOrMethod(GradleLintRule.groovy:401)
        at org.codenarc.rule.AbstractAstVisitor.visitMethod(AbstractAstVisitor.java:171)
        at org.codenarc.rule.AbstractAstVisitor.visitClass(AbstractAstVisitor.java:148)
        at org.codenarc.rule.AbstractAstVisitorRule.applyTo(AbstractAstVisitorRule.java:97)
        at org.codenarc.rule.AbstractRule.applyTo(AbstractRule.java:142)
        at org.codenarc.rule.Rule$applyTo$0.call(Unknown Source)
        at com.netflix.nebula.lint.rule.GradleLintRule.applyTo(GradleLintRule.groovy:133)
        at org.codenarc.rule.Rule$applyTo$0.call(Unknown Source)
        at org.codenarc.rule.Rule$applyTo$0.call(Unknown Source)
        at org.codenarc.analyzer.AbstractSourceAnalyzer.collectViolations(AbstractSourceAnalyzer.groovy:40)
        at com.netflix.nebula.lint.plugin.LintService$ReportableAnalyzer.analyze(LintService.groovy:48)
        at com.netflix.nebula.lint.plugin.LintService$ReportableAnalyzer$analyze.call(Unknown Source)
        at com.netflix.nebula.lint.plugin.LintService$_lint_closure3.doCall(LintService.groovy:96)
        at com.netflix.nebula.lint.plugin.LintService.lint(LintService.groovy:93)
        at com.netflix.nebula.lint.plugin.LintService$lint.call(Unknown Source)
        at com.netflix.nebula.lint.plugin.LintGradleTask.lint(LintGradleTask.groovy:41)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:228)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:221)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:210)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:585)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:568)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
        ... 60 more
Caused by: java.lang.ClassNotFoundException: com.google.common.collect.Multimaps
        ... 111 more


BUILD FAILED

fixGradleLint with nebula.integtest uses wrong configuration

I have both the nebula.lint plugin and the nebula.integtest applied on my project.
When I run ./gradlew fixGradleLint, nebula.lint generates correct dependency entries in my gradle.build file but with the wrong source set. It generates entries with the compile source set instead of the integtestCompile source set

README says lintGradle is the task. It's not. It is gradleLint

See:

Other tasks
-----------
allDepInsight
allDeps
cleanIdeaWorkspace
cleanLogs - Clean build log files
dependencyManagement
findbugs
findbugsTest - Run FindBugs analysis for test classes
fixGradleLint
generateGradleLintReport
gradleLint
install - Installs the 'archives' artifacts into the local Maven repository.
javadoc
wrapper - Gradle's wrapper

Does this work on Android projects?

I created a basic Android project from scratch using Android Studio. I then added compile 'com.google.guava:guava:19.0' to my dependencies, just to give Gradle Lint a test drive. I then added the unused-dependency rule and ran ./gradlew lintGradle, but it reported no violations.

Note that Android projects are multi-module by default, and the artifact produced is an APK file.

gradle fails with exception

after #66 merged I have exception when trying to add criticalRule

Caused by: groovy.lang.MissingPropertyException: No such property: level for class: com.netflix.nebula.lint.GradleViolation
        at com.netflix.nebula.lint.GradleLintInfoBrokerAction.buildReportItem(GradleLintInfoBrokerAction.groovy:30)
        at com.netflix.nebula.lint.GradleLintInfoBrokerAction$_lintFinished_closure1$_closure3.doCall(GradleLintInfoBrokerAction.groovy:14)
        at com.netflix.nebula.lint.GradleLintInfoBrokerAction$_lintFinished_closure1.doCall(GradleLintInfoBrokerAction.groovy:14)
        at org.gradle.api.internal.ClosureBackedAction.execute(ClosureBackedAction.java:70)

basic set of rules by default

It would be extremely nice if out of the box gradle lint was configured with some basic rules. Otherwise I find myself duplicating the same gradleLint.rules = ['all-dependency'] in every project.

Dependency checks do not work when dependency declaration defined centrally

Apologies for the vague title ... struggled to capture it...

We have a large multi-project build. To assist us with consistency, we declare some common dependencies in our root project. e.g.

ext.deps = [
    guava: "com.google.guava:guava:17.0"
]

In our sub-projects we can then reference these dependencies (and ensure we're being consistent). e.g.

project.dependencies {
    compile deps.guava
}

This allows us to update a dependency version (e.g. guava) and have it updated in all projects.

It seems that the gradle lint plugin does not see dependencies declared this way, so does not work at all as expected.

Any ideas how this configuration might be supported?

I found this plugin when considering building my own plugin to look for duplicate classes (like the 'duplicate-dependency-class' rule). I had some proof of concept code, but it would interrogate the dependencies at gradle runtime ... not the source of the gradle script.

Dependency rules fail on project dependencies

Appears to go looking for the project artifact and fails:

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':lintGradle'.
> java.lang.reflect.UndeclaredThrowableException (no error message)

* Try:
Run with --info or --debug option to get more log output.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':lintGradle'.
 at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
 at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
 at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
 at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:68)
 at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
 at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:52)
 at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
 at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
 at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
 at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:203)
 at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:185)
 at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:66)
 at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:50)
 at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:25)
 at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:110)
 at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37)
 at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
 at org.gradle.execution.DefaultBuildExecuter.access$000(DefaultBuildExecuter.java:23)
 at org.gradle.execution.DefaultBuildExecuter$1.proceed(DefaultBuildExecuter.java:43)
 at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
 at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
 at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:30)
 at org.gradle.initialization.DefaultGradleLauncher$4.run(DefaultGradleLauncher.java:154)
 at org.gradle.internal.Factories$1.create(Factories.java:22)
 at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
 at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:52)
 at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:151)
 at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:32)
 at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:99)
 at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:93)
 at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
 at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:62)
 at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:93)
 at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:82)
 at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:94)
 at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
 at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
 at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:43)
 at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:28)
 at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:81)
 at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:46)
 at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:51)
 at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:28)
 at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:43)
 at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:173)
 at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:241)
 at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:214)
 at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:35)
 at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24)
 at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:207)
 at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169)
 at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
 at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
 at org.gradle.launcher.Main.doAction(Main.java:33)
 at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
 at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:55)
 at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:36)
 at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
 at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:30)
 at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:129)
 at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:61)
Caused by: java.lang.reflect.UndeclaredThrowableException
 at jsr166y.ForkJoinTask.getThrowableException(ForkJoinTask.java:504)
 at jsr166y.ForkJoinTask.reportResult(ForkJoinTask.java:567)
 at jsr166y.ForkJoinTask.join(ForkJoinTask.java:611)
 at jsr166y.ForkJoinPool.invoke(ForkJoinPool.java:1492)
 at groovyx.gpars.extra166y.ParallelArrayWithMapping.apply(ParallelArrayWithMapping.java:48)
 at groovyx.gpars.extra166y.ParallelArray.apply(ParallelArray.java:329)
 at groovyx.gpars.pa.GParsPoolUtilHelper.eachParallelPA(GParsPoolUtilHelper.groovy:192)
 at groovyx.gpars.GParsPoolUtil.eachParallel(GParsPoolUtil.java:358)
 at com.netflix.nebula.lint.rule.dependency.DependencyService$_memoizedMethodPriv_artifactsByClassConfiguration_closure15.doCall(DependencyService.groovy:71)
 at groovyx.gpars.GParsPool$_withExistingPool_closure1.doCall(GParsPool.groovy:174)
 at groovyx.gpars.GParsPool$_withExistingPool_closure1.doCall(GParsPool.groovy)
 at groovyx.gpars.GParsPool.withExistingPool(GParsPool.groovy:173)
 at groovyx.gpars.GParsPool$withExistingPool$2.callStatic(Unknown Source)
 at groovyx.gpars.GParsPool.withPool(GParsPool.groovy:145)
 at groovyx.gpars.GParsPool$withPool$1.callStatic(Unknown Source)
 at groovyx.gpars.GParsPool.withPool(GParsPool.groovy:121)
 at groovyx.gpars.GParsPool$withPool$0.callStatic(Unknown Source)
 at groovyx.gpars.GParsPool.withPool(GParsPool.groovy:100)
 at groovyx.gpars.GParsPool$withPool.call(Unknown Source)
 at com.netflix.nebula.lint.rule.dependency.DependencyService.memoizedMethodPriv$artifactsByClassConfiguration(DependencyService.groovy:70)
 at com.netflix.nebula.lint.rule.dependency.DependencyService$_closure1.doCall(DependencyService.groovy)
 at com.netflix.nebula.lint.rule.dependency.DependencyService.artifactsByClass(DependencyService.groovy)
 at com.netflix.nebula.lint.rule.dependency.DependencyService$artifactsByClass$3.callCurrent(Unknown Source)
 at com.netflix.nebula.lint.rule.dependency.DependencyService.artifactsByClass(DependencyService.groovy:45)
 at com.netflix.nebula.lint.rule.dependency.DependencyService$artifactsByClass$2.call(Unknown Source)
 at com.netflix.nebula.lint.rule.dependency.DuplicateDependencyClassRule.visitGradleDependency(DuplicateDependencyClassRule.groovy:22)
 at com.netflix.nebula.lint.rule.GradleLintRule.this$dist$invoke$4(GradleLintRule.groovy)
 at com.netflix.nebula.lint.rule.GradleLintRule$1.methodMissing(GradleLintRule.groovy)
 at com.netflix.nebula.lint.rule.GradleLintRule$1.this$dist$invoke$3(GradleLintRule.groovy)
 at com.netflix.nebula.lint.rule.GradleLintRule$1$2.methodMissing(GradleLintRule.groovy)
 at com.netflix.nebula.lint.rule.GradleLintRule$1$2.visitMethodCallInDependencies(GradleLintRule.groovy:384)
 at com.netflix.nebula.lint.rule.GradleLintRule$1$2.visitMethodCallExpression(GradleLintRule.groovy:207)
 at com.netflix.nebula.lint.rule.GradleLintRule$1$2.super$3$visitExpressionStatement(GradleLintRule.groovy)
 at com.netflix.nebula.lint.rule.GradleLintRule$1$2.visitExpressionStatement(GradleLintRule.groovy:344)
 at com.netflix.nebula.lint.rule.GradleLintRule$1$2.super$2$visitMethodCallExpression(GradleLintRule.groovy)
 at com.netflix.nebula.lint.rule.GradleLintRule$1$2.visitMethodCallExpression(GradleLintRule.groovy:214)
 at com.netflix.nebula.lint.rule.GradleLintRule$1$2.super$3$visitExpressionStatement(GradleLintRule.groovy)
 at com.netflix.nebula.lint.rule.GradleLintRule$1$2.visitExpressionStatement(GradleLintRule.groovy:344)
 at com.netflix.nebula.lint.rule.GradleLintRule$1$3$_visitConstructorOrMethod_closure11.doCall(GradleLintRule.groovy:464)
 at com.netflix.nebula.lint.rule.GradleLintRule$1$3.both(GradleLintRule.groovy:408)
 at com.netflix.nebula.lint.rule.GradleLintRule$1$3$both.callCurrent(Unknown Source)
 at com.netflix.nebula.lint.rule.GradleLintRule$1$3.visitConstructorOrMethod(GradleLintRule.groovy:464)
 at com.netflix.nebula.lint.org.codenarc.rule.AbstractAstVisitor.visitMethod(AbstractAstVisitor.java:171)
 at com.netflix.nebula.lint.org.codenarc.rule.AbstractAstVisitor.visitClass(AbstractAstVisitor.java:148)
 at com.netflix.nebula.lint.org.codenarc.rule.AbstractAstVisitorRule.applyTo(AbstractAstVisitorRule.java:97)
 at com.netflix.nebula.lint.org.codenarc.rule.AbstractRule.applyTo(AbstractRule.java:142)
 at com.netflix.nebula.lint.org.codenarc.rule.Rule$applyTo$0.call(Unknown Source)
 at com.netflix.nebula.lint.rule.GradleLintRule.applyTo(GradleLintRule.groovy:134)
 at com.netflix.nebula.lint.org.codenarc.rule.Rule$applyTo$0.call(Unknown Source)
 at com.netflix.nebula.lint.org.codenarc.rule.Rule$applyTo$0.call(Unknown Source)
 at com.netflix.nebula.lint.org.codenarc.analyzer.AbstractSourceAnalyzer.collectViolations(AbstractSourceAnalyzer.groovy:40)
 at com.netflix.nebula.lint.plugin.LintService$ReportableAnalyzer.analyze(LintService.groovy:48)
 at com.netflix.nebula.lint.plugin.LintService$ReportableAnalyzer$analyze.call(Unknown Source)
 at com.netflix.nebula.lint.plugin.LintService$_lint_closure3.doCall(LintService.groovy:96)
 at com.netflix.nebula.lint.plugin.LintService.lint(LintService.groovy:93)
 at com.netflix.nebula.lint.plugin.LintService$lint.call(Unknown Source)
 at com.netflix.nebula.lint.plugin.LintGradleTask.lint(LintGradleTask.groovy:41)
 at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75)
 at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:228)
 at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:221)
 at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:210)
 at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:585)
 at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:568)
 at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
 at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
 ... 60 more
Caused by: java.lang.reflect.UndeclaredThrowableException
 at jsr166y.ForkJoinTask.getThrowableException(ForkJoinTask.java:504)
 at jsr166y.ForkJoinTask.reportResult(ForkJoinTask.java:567)
 at jsr166y.ForkJoinTask.join(ForkJoinTask.java:611)
 at groovyx.gpars.extra166y.PAS$FJBase.internalCompute(PAS.java:120)
 at groovyx.gpars.extra166y.PAS$FJBase.compute(PAS.java:106)
 at jsr166y.RecursiveAction.exec(RecursiveAction.java:148)
 at jsr166y.ForkJoinTask.doExec(ForkJoinTask.java:305)
 at jsr166y.ForkJoinWorkerThread.execTask(ForkJoinWorkerThread.java:575)
 at jsr166y.ForkJoinPool.scan(ForkJoinPool.java:755)
 at jsr166y.ForkJoinPool.work(ForkJoinPool.java:617)
 at jsr166y.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:369)
Caused by: java.lang.reflect.UndeclaredThrowableException
 at jsr166y.ForkJoinTask.getThrowableException(ForkJoinTask.java:504)
 at jsr166y.ForkJoinTask.reportResult(ForkJoinTask.java:567)
 at jsr166y.ForkJoinTask.join(ForkJoinTask.java:611)
 at groovyx.gpars.extra166y.PAS$FJBase.internalCompute(PAS.java:120)
 at groovyx.gpars.extra166y.PAS$FJBase.compute(PAS.java:106)
 at jsr166y.RecursiveAction.exec(RecursiveAction.java:148)
 at jsr166y.ForkJoinTask.doExec(ForkJoinTask.java:305)
 at jsr166y.ForkJoinWorkerThread.execTask(ForkJoinWorkerThread.java:575)
 at jsr166y.ForkJoinPool.scan(ForkJoinPool.java:733)
 ... 2 more
Caused by: java.lang.reflect.UndeclaredThrowableException
 ... 11 more
Caused by: java.lang.reflect.UndeclaredThrowableException
 at jsr166y.ForkJoinTask.getThrowableException(ForkJoinTask.java:504)
 at jsr166y.ForkJoinTask.reportResult(ForkJoinTask.java:567)
 at jsr166y.ForkJoinTask.join(ForkJoinTask.java:611)
 at groovyx.gpars.extra166y.PAS$FJBase.internalCompute(PAS.java:120)
 at groovyx.gpars.extra166y.PAS$FJBase.compute(PAS.java:106)
 at jsr166y.RecursiveAction.exec(RecursiveAction.java:148)
 at jsr166y.ForkJoinTask.doExec(ForkJoinTask.java:305)
 at jsr166y.ForkJoinWorkerThread.helpJoinTask(ForkJoinWorkerThread.java:783)
 at jsr166y.ForkJoinWorkerThread.joinTask(ForkJoinWorkerThread.java:698)
 at jsr166y.ForkJoinTask.doJoin(ForkJoinTask.java:333)
 at jsr166y.ForkJoinTask.join(ForkJoinTask.java:610)
 ... 8 more
Caused by: java.lang.reflect.UndeclaredThrowableException
 at com.sun.proxy.$Proxy74.op(Unknown Source)
 at groovyx.gpars.extra166y.AbstractParallelAnyArray$OUPap.leafApply(AbstractParallelAnyArray.java:640)
 at groovyx.gpars.extra166y.PAS$FJOApply.atLeaf(PAS.java:147)
 at groovyx.gpars.extra166y.PAS$FJBase.internalCompute(PAS.java:118)
 ... 15 more
Caused by: java.io.FileNotFoundException: /mnt/builds/slave/workspace/MCE-minions-deploy-from-bake~2/test-common/build/libs/minions-test-common-1.0.75.jar (No such file or directory)
 at com.netflix.nebula.lint.rule.dependency.DependencyService.memoizedMethodPriv$jarContentsFile(DependencyService.groovy:106)
 at com.netflix.nebula.lint.rule.dependency.DependencyService$__clinit__closure32.doCall(DependencyService.groovy)
 at com.netflix.nebula.lint.rule.dependency.DependencyService.jarContents(DependencyService.groovy)
 at com.netflix.nebula.lint.rule.dependency.DependencyService$_memoizedMethodPriv_artifactsByClassConfiguration_closure15$_closure38.doCall(DependencyService.groovy:78)
 at groovyx.gpars.pa.GParsPoolUtilHelper$_eachParallelPA_closure8.doCall(GParsPoolUtilHelper.groovy:192)
 ... 19 more

Question: does the linter support compileOnly configurations?

It seems like the rule 'unused-dependency' is not ranking a dependency with configuration "compileOnly" correctly.

I have a project with
"compileOnly 'ojdbc-driver'" and of course I am using classes from that driver in my source. But I do not want other projects to receive that library transitive because it will be provided by the Oracle middleware. That is why I chose configuration "compileOnly" (see here)

Running gradle-lint-plugin gives me the following warning:
"warning unused-dependency one or more classes in com.oracle:ojdbc6:11.2.0.3.0 are required by your code directly"

If the linter does not support that configuration I hereby ask for implementation.

PatchApplyException when running fixLintGradle

I've run the lintGradle task against a build script and it was able to produce a patch file (let me know if you'd like to see it). However, when I run the fixLintGradle task, I'm consistently getting the error shown below. Please let me know what (if anything) else that you'd like to see.

:fixLintGradle FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':fixLintGradle'.
> com.netflix.nebula.lint.jgit.api.errors.PatchApplyException: Cannot apply: HunkHeader[36,9->36,9]

* Try:
Run with --info or --debug option to get more log output.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':fixLintGradle'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
        at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:68)
        at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
        at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:52)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
        at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:203)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:185)
        at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:66)
        at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:50)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:25)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:110)
        at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37)
        at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
        at org.gradle.execution.DefaultBuildExecuter.access$000(DefaultBuildExecuter.java:23)
        at org.gradle.execution.DefaultBuildExecuter$1.proceed(DefaultBuildExecuter.java:43)
        at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
        at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
        at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:30)
        at org.gradle.initialization.DefaultGradleLauncher$4.run(DefaultGradleLauncher.java:154)
        at org.gradle.internal.Factories$1.create(Factories.java:22)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:52)
        at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:151)
        at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:32)
        at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:99)
        at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:93)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:62)
        at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:93)
        at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:82)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:94)
        at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
        at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:43)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:28)
        at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:81)
        at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:46)
        at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:51)
        at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:28)
        at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:43)
        at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:173)
        at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:241)
        at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:214)
        at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:35)
        at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24)
        at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:207)
        at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169)
        at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
        at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
        at org.gradle.launcher.Main.doAction(Main.java:33)
        at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:55)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:36)
        at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
        at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:30)
        at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:127)
        at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:56)
Caused by: org.gradle.internal.UncheckedException: com.netflix.nebula.lint.jgit.api.errors.PatchApplyException: Cannot apply: HunkHeader[36,9->36,9]
        at org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java:45)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:78)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:228)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:221)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:210)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:585)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:568)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
        ... 60 more
Caused by: com.netflix.nebula.lint.jgit.api.errors.PatchApplyException: Cannot apply: HunkHeader[36,9->36,9]
        at com.netflix.nebula.lint.jgit.api.ApplyCommand.apply(ApplyCommand.java:221)
        at com.netflix.nebula.lint.jgit.api.ApplyCommand.call(ApplyCommand.java:135)
        at com.netflix.nebula.lint.jgit.api.ApplyCommand.call(ApplyCommand.java:76)
        at java_util_concurrent_Callable$call.call(Unknown Source)
        at com.netflix.nebula.lint.plugin.FixGradleLintTask.lintCorrections(FixGradleLintTask.groovy:57)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75)
        ... 67 more


BUILD FAILED

lint.patch with rule `unused-dependency` on multimodule project broken

project dependencies are not handled correctly, the added lines in lint.patch are prefixed with the root project, version is unspecified and added as a compile dependency (not compile project)
f.ex compile 'Casumo-Engine.platform.components/seamless-wallet:seamless-wallet-api:unspecified'
Also no project dependencies are removed, only the broken prefixed ones are added.

JavaPluginConvention doesn't work for new plugin DSL

When you use the new style DSL to apply java, e.g plugins { id 'java' }, getPlugin throws an IllegalStateException:

usedDependencies = project.convention.getPlugin(JavaPluginConvention)
        .sourceSets
        .inject(new DependencyReferences()) { DependencyReferences result, sourceSet ->
            dependencyReferences(sourceSet, dependenciesByClass, result)
        }

Provide a "skip" or "disable" option

When using lint in a parent script that is inherited by other scripts / projects one sometimes wants to skip running the lint check.

I. e. while debugging script behaviour or something. When the lint plugin has been applied to a parent script, you cannot easily unapply it. So a configurable option like "skipLintCheck" or "disableLintCheck" would be a proper solution. At best this option is available for the command line to, providing something like "gradle clean build --lint.skipCheck" or "gradle clean build -Dlint.skip.check"

Support for excluding transitive project dependencies

Hi,

is there a way to tell gradle lint to ignore transitive dependencies from specified group?

I got error when running unused-exclude-by-conf or unused-exclude-by-dep

 Could not resolve all dependencies for configuration 'detachedConfiguration113'.
  > Could not find [module_root]:[module]Commons:unspecified.

I use this project structure in my projects (microservice approach):

  • [module]Commons
  • [module]Client
  • [module]Server

both Client and Server depends on Commons project

dependencies {
    compile project(':[module]Commons')
}

Problem arises when I add dependency on client in other module with excluding transitive dependency for Commons (I add it manually with proper version)

compile("[module]Client:1.0.37"){
    exclude group: '[module_root]', module: '[module]commons' 
}

Or maybe I should reorganize my dependencies to not use project but versioned jar? This doesn't make sense to me since both subproject are stored in one repository.

/org/eclipse/jgit/org.eclipse.jgit/4.4.0-SNAPSHOT/ is not found

hello,

this is a double issue
-/org/eclipse/jgit/org.eclipse.jgit/4.4.0-SNAPSHOT/ is not on any repo?
-it only tries to download it when in gradle you put :

    maven {
        url "https://plugins.gradle.org/m2/"
    }

as the first repo

there is no problem when maven central is the first repo configured

Task has not declared any outputs?

I've found some curious code in a project that I am trying to modify, so I figured that the gradle lint plugin might help me figure out if there was a problem or not.

Curiously, when I run lintGradle though, there is no output. I cannot believe this is perfect code, so I assume there is something I am doing wrong. Can you point me in the right direction?

11:24:31.988 [INFO] [org.gradle.BuildLogger] Tasks to be executed: [task ':lintGradle']
11:24:32.005 [INFO] [org.gradle.execution.taskgraph.AbstractTaskPlanExecutor] :lintGradle (Thread[main,5,main]) started.
11:24:32.006 [LIFECYCLE] [class org.gradle.TaskExecutionLogger] :lintGradle
11:24:32.007 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Starting to execute task ':lintGradle'
11:24:32.008 [DEBUG] [org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter] Determining if task ':lintGradle' is up-to-date
11:24:32.009 [INFO] [org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter] Executing task ':lintGradle' (up-to-date check took 0.001 secs) due to:
  Task has not declared any outputs.
11:24:32.010 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter] Executing actions for task ':lintGradle'.
11:24:32.076 [INFO] [org.codenarc.ruleregistry.PropertiesFileRuleRegistry] Loaded properties file in 16ms; 348 rules
11:24:32.143 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Finished executing task ':lintGradle'
11:24:32.144 [INFO] [org.gradle.execution.taskgraph.AbstractTaskPlanExecutor] :lintGradle (Thread[main,5,main]) completed. Took 0.138 secs.
11:24:32.145 [DEBUG] [org.gradle.execution.taskgraph.AbstractTaskPlanExecutor] Task worker [Thread[main,5,main]] finished, busy: 0.138 secs, idle: 0.002 secs
11:24:32.146 [DEBUG] [org.gradle.execution.taskgraph.DefaultTaskGraphExecuter] Timing: Executing the DAG took 0.159 secs
11:24:32.146 [LIFECYCLE] [org.gradle.BuildResultLogger]
11:24:32.148 [LIFECYCLE] [org.gradle.BuildResultLogger] BUILD SUCCESSFUL
11:24:32.149 [LIFECYCLE] [org.gradle.BuildResultLogger]
11:24:32.149 [LIFECYCLE] [org.gradle.BuildResultLogger] Total time: 5.691 secs

Wrong warnings from a dependency in different configurations

have an older project that is using log4j in runtime.
there are newer tests that are using slf4j-log4j which has log4j dependency.

the direct runtime dependency uses version 1.2.16
the transitive testRuntime dependency uses version 1.2.17

the linter shows the following warnings:

warning   duplicate-dependency-class         log4j:log4j:1.2.16 in configuration 'compile' has 308 classes duplicated by log4j:log4j:1.2.17

warning   unused-dependency                  one or more classes in log4j:log4j:1.2.17 are required by your code directly

warning   unused-dependency                  this dependency is unused and can be removed
build.gradle:32
testCompile 'org.slf4j:slf4j-log4j12:1.7.7'

attached you find a sample project.
linter.log4j.test.tar.gz

run with ./gradlew clean build

I would expect the linter to respect the dependency resolution of Gradle, which in this case is to use older version in "runtime" configuration and the newer version in "testRuntime" configuration. thus leading to no warnings at all.

Android project: java.lang.NoSuchFieldError: originalComplianceLevel

Gradle 3.0
Android gradle plugin 2.2.0-beta2
Gradle lint plugin 4.0.1

Unable to build the project. Got this

org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':common:extractLibraryDebugAnnotations'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
        at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
        at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
        at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:52)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
        at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:203)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:185)
        at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:74)
        at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:55)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
        at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
Caused by: java.lang.NoSuchFieldError: originalComplianceLevel
        at com.android.tools.lint.EcjParser.createCompilerOptions(EcjParser.java:199)
        at com.android.build.gradle.tasks.ExtractAnnotations.parseSources(ExtractAnnotations.java:301)
        at com.android.build.gradle.tasks.ExtractAnnotations.compile(ExtractAnnotations.java:210)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75)
        at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.doExecute(DefaultTaskClassInfoStore.java:133)
        at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:126)
        at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:115)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:623)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:606)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
        ... 14 more

Error when running fixGradleLint

Hello,

I'm trying to evaluate this plugin but cannot get the fixGradleLint task to work. I'm running gradle 2.12 on Windows 10.

First of all I ran:

C:\Users\manthanhd\Documents\projects\gradle-lint-test>gradle lintGradle
:lintGradle                                                                                                                                                                       

This project contains lint violations.  A complete listing of the violations follows.
Because none were serious, the build's overall status was unaffected.

warning   unused-dependency                  one or more classes in org.springframework:spring-web:4.2.6.RELEASE are required by your code directly

warning   unused-dependency                  one or more classes in org.springframework.boot:spring-boot:1.3.5.RELEASE are required by your code directly

warning   unused-dependency                  one or more classes in org.springframework.boot:spring-boot-autoconfigure:1.3.5.RELEASE are required by your code directly

warning   unused-dependency                  one or more classes in org.springframework:spring-context:4.2.6.RELEASE are required by your code directly

? build.gradle: 4 problems (0 errors, 4 warnings)

To apply fixes automatically, run fixGradleLint, review, and commit the changes.


BUILD SUCCESSFUL

Total time: 10.455 secs

And then to fix the issues, ran:

C:\Users\manthanhd\Documents\projects\gradle-lint-test>gradle fixGradleLint
:fixGradleLint FAILED                                                                                                                                                                

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':fixGradleLint'.
> com.netflix.nebula.lint.jgit.api.errors.PatchApplyException: Cannot apply: HunkHeader[37,6->37,10]

* Try:         
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED   

Total time: 10.414 secs

Here's the same command output but with --info. I truncated most output as it was too much.

...
Using version '1.7.21' for dependency 'org.slf4j:slf4j-api:1.7.20'                                                   
Using version '1.7.21' for dependency 'org.slf4j:slf4j-api:1.7.21'                                                   
Using version '9.2.16.v20160414' for dependency 'org.eclipse.jetty:jetty-server:9.2.16.v20160414'                    
Excluding []                                                                                                         
Using version '4.5.2' for dependency 'org.apache.httpcomponents:httpclient:4.5.2'
Using version '1.3.5.RELEASE' for dependency 'org.springframework.boot:spring-boot-starter-web:'
Using version '1.3.5.RELEASE' for dependency 'org.springframework.boot:spring-boot-starter-jetty:'
...
Using version '9.2.16.v20160414' for dependency 'org.eclipse.jetty:jetty-plus:9.2.16.v20160414'
Using version '1.1.7' for dependency 'ch.qos.logback:logback-core:1.1.7'
Using version '1.7.21' for dependency 'org.slf4j:slf4j-api:1.7.20'
Using version '1.7.21' for dependency 'org.slf4j:slf4j-api:1.7.21'
Using version '9.2.16.v20160414' for dependency 'org.eclipse.jetty:jetty-server:9.2.16.v20160414'
:fixGradleLint FAILED                                             
:fixGradleLint (Thread[main,5,main]) completed. Took 3.564 secs.

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':fixGradleLint'.
> com.netflix.nebula.lint.jgit.api.errors.PatchApplyException: Cannot apply: HunkHeader[37,6->37,10]

* Try:         
Run with --stacktrace option to get the stack trace. Run with --debug option to get more log output.

BUILD FAILED   

Total time: 11.579 secs

Here's my build.gradle file for reference:

buildscript {
    repositories {
        mavenCentral()
        jcenter()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.5.RELEASE")
    }
}

plugins {
    id 'nebula.lint' version '0.30.12'
}

allprojects {
    apply plugin: 'nebula.lint'
    gradleLint.rules = ['unused-dependency'] // add as many rules here as you'd like
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'spring-boot'

jar {
    baseName = 'gs-spring-boot'
    version =  '0.1.0'
}

repositories {
    mavenCentral()
    jcenter()
}

sourceCompatibility = 1.7
targetCompatibility = 1.7

dependencies {
    compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.2'
    // tag::jetty[]
    compile("org.springframework.boot:spring-boot-starter-web") {
        exclude module: "spring-boot-starter-tomcat"
    }
    compile("org.springframework.boot:spring-boot-starter-jetty")
    // end::jetty[]
    // tag::actuator[]
    compile("org.springframework.boot:spring-boot-starter-actuator")
    // end::actuator[]
    testCompile("junit:junit")
}

task wrapper(type: Wrapper) {
    gradleVersion = '2.1'
}

^ file is mostly from Spring Boot tutorial.

I can see a lint.patch file in the build directory and when I apply it manually I can see a massive difference in the build size as its removing a lot of unused dependencies.

Here's that lint.patch file:

diff --git a/build.gradle b/build.gradle
--- a/build.gradle
+++ b/build.gradle
@@ -36,6 +36,10 @@
 targetCompatibility = 1.7

 dependencies {
+   compile 'org.springframework:spring-web:4.2.6.RELEASE'
+   compile 'org.springframework.boot:spring-boot:1.3.5.RELEASE'
+   compile 'org.springframework.boot:spring-boot-autoconfigure:1.3.5.RELEASE'
+   compile 'org.springframework:spring-context:4.2.6.RELEASE'
     compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.2'
     // tag::jetty[]
     compile("org.springframework.boot:spring-boot-starter-web") {

Any ideas why the automated fixGradleLint task is not working?

[v5.1.0+] Ignoring duplicate-dependency-rule from centralized dependency definitions

Hi again,

First off, just wanted to say thanks for the hard work on this plugin! Heaps appreciated, and sorry for this long feedback loop:

Related to #42 and #43:

Configuration (gradle ver: 2.14)

gradleLint.rules = ['duplicate-dependency-class', 'overridden-dependency-version']
apply from: 'dependencies.gradle'

dependencies.gradle

ext.deps = [
    derby: "org.apache.derby:derby:10.4.2.0",
    derbytools: "org.apache.derby:derbytools:10.4.2.0"
]

Ignoring duplicate-dependency-class

gradleLint.ignore('duplicate-dependency-class') {
    compile deps.derby
}
runtime deps.derbytools

generates the errors
org.apache.derby:derby:10.4.2.0 in configuration 'runtime' has 15 classes duplicated by org.apache.derby:derbytools:10.4.2.0 (no auto-fix available)

org.apache.derby:derby:10.4.2.0 in configuration 'compile' has 15 classes duplicated by org.apache.derby:derbytools:10.4.2.0 (no auto-fix available)

This occurs from v5.1.0 upwards (after the fix for #43 was implemented).

can't find subproject source code

When trying to run the generateGradleLintReport from the root project directory it errors:

[jscancella@johns-air transfer (master)]$ gradle generateGradleLintReport
:generateGradleLintReport
Error from [com.netflix.nebula.lint.rule.GradleLintRule$1] processing source file [null]
:generateGradleLintReport FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':generateGradleLintReport'.
> gov/loc/repository/model/Ided

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 1.181 secs

And here is the build environment

[jscancella@johns-air transfer (master)]$ gradle buildenv
:buildEnvironment

------------------------------------------------------------
Root project
------------------------------------------------------------

classpath
\--- com.netflix.nebula:gradle-lint-plugin:latest.release -> 4.0.0
     +--- org.ow2.asm:asm:5.0.4
     +--- com.netflix.nebula:gradle-info-plugin:3.0.4
     |    +--- com.perforce:p4java-jfrog:2011.1.297684
     |    |    \--- com.jcraft:jzlib:1.0.7
     |    +--- com.netflix.nebula:gradle-contacts-plugin:2.2.0
     |    +--- org.eclipse.jgit:org.eclipse.jgit:3.2.0.201312181205-r
     |    |    +--- com.jcraft:jsch:0.1.46
     |    |    \--- com.googlecode.javaewah:JavaEWAH:0.5.6
     |    \--- org.tmatesoft.svnkit:svnkit:1.8.5
     |         +--- com.jcraft:jsch.agentproxy.svnkit-trilead-ssh2:0.0.7
     |         |    +--- com.trilead:trilead-ssh2:1.0.0-build217
     |         |    \--- com.jcraft:jsch.agentproxy.core:0.0.7
     |         +--- net.java.dev.jna:jna:3.5.2
     |         +--- org.tmatesoft.sqljet:sqljet:1.1.10
     |         |    \--- org.antlr:antlr-runtime:3.4
     |         +--- net.java.dev.jna:platform:3.5.2
     |         |    \--- net.java.dev.jna:jna:3.5.2
     |         +--- com.jcraft:jsch.agentproxy.connector-factory:0.0.7
     |         |    +--- com.jcraft:jsch.agentproxy.core:0.0.7
     |         |    +--- com.jcraft:jsch.agentproxy.usocket-jna:0.0.7
     |         |    |    +--- com.jcraft:jsch.agentproxy.core:0.0.7
     |         |    |    +--- net.java.dev.jna:jna:3.4.0 -> 3.5.2
     |         |    |    \--- net.java.dev.jna:platform:3.4.0 -> 3.5.2 (*)
     |         |    +--- com.jcraft:jsch.agentproxy.usocket-nc:0.0.7
     |         |    |    \--- com.jcraft:jsch.agentproxy.core:0.0.7
     |         |    +--- com.jcraft:jsch.agentproxy.sshagent:0.0.7
     |         |    |    \--- com.jcraft:jsch.agentproxy.core:0.0.7
     |         |    \--- com.jcraft:jsch.agentproxy.pageant:0.0.7
     |         |         +--- com.jcraft:jsch.agentproxy.core:0.0.7
     |         |         +--- net.java.dev.jna:jna:3.4.0 -> 3.5.2
     |         |         \--- net.java.dev.jna:platform:3.4.0 -> 3.5.2 (*)
     |         +--- de.regnis.q.sequence:sequence-library:1.0.2
     |         \--- com.trilead:trilead-ssh2:1.0.0-build217
     +--- commons-lang:commons-lang:2.6
     +--- org.eclipse.jdt:core:3.1.1
     +--- org.codehaus.gpars:gpars:1.2.1
     |    +--- org.multiverse:multiverse-core:0.7.0
     |    \--- org.codehaus.jsr166-mirror:jsr166y:1.7.0
     \--- junit:junit:4.12
          \--- org.hamcrest:hamcrest-core:1.3

(*) - dependencies omitted (listed previously)
:lintGradle
Error from [com.netflix.nebula.lint.rule.GradleLintRule$1] processing source file [null]
:lintGradle FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':lintGradle'.
> gov/loc/repository/model/Ided

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 1.249 secs

problem with running any task

hello, i like the idee of gradleLint.

Tested it on our multi module project but i get

$ ./gradlew generateGradleLintReport 
Starting a new Gradle Daemon for this build (subsequent builds will be faster).
Parallel execution is an incubating feature.
Version: SNAPSHOT
Platform: darwin
:generateGradleLintReport
:core:generateGradleLintReport
:integration:generateGradleLintReport
Error from [com.netflix.nebula.lint.rule.GradleLintRule$1] processing source file [null]
:generateGradleLintReport FAILED
Generated a report containing information about 1 lint violation in this project
Error from [com.netflix.nebula.lint.rule.GradleLintRule$1] processing source file [null]
:core:generateGradleLintReport FAILED

FAILURE: Build completed with 2 failures.

1: Task failed with an exception.
-----------
* What went wrong:
Execution failed for task ':generateGradleLintReport'.
> Could not find any convention object of type JavaPluginConvention.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
==============================================================================

2: Task failed with an exception.
-----------
* What went wrong:
Execution failed for task ':core:generateGradleLintReport'.
> Cannot get property 'isWebjar' on null object

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
==============================================================================

BUILD FAILED

What more info do you need to help?

[v4.0.1] duplicate-dependency-class ignore no longer works

After the fix for #42, wrapping a block to ignore the rule 'duplicate-dependency-class' doesn't seem to work any longer. This looks like it happens with both the standard way of declaring dependencies and the aliasing used in #42.

example:
gradleLint.ignore('duplicate-dependency-class') { testCompile "org.hamcrest:hamcrest-all:1.3" }

now produces the console output
warning duplicate-dependency-class org.hamcrest:hamcrest-all:1.3 in configuration 'testCompile' has 45 classes duplicated by org.hamcrest:hamcrest-core:1.3

Missing codenarc library

It looks like v0.28.0 is missing the codenarc jar. When i attempt to run any task I get the following error:

* What went wrong:
An exception occurred applying plugin request [id: 'nebula.lint', version: '0.28.0']
> Failed to apply plugin [id 'nebula.lint']
   > Could not create task of type 'LintGradleTask'.

I have attached the stacktrace which shows the root cause:

Caused by: java.lang.NoClassDefFoundError: org/codenarc/rule/Violation
        at com.netflix.nebula.lint.plugin.LintGradleTask$1.$getStaticMetaClass(LintGradleTask.groovy)
        at com.netflix.nebula.lint.GradleLintViolationAction.<init>(GradleLintViolationAction.groovy)
        at com.netflix.nebula.lint.plugin.LintGradleTask$1.<init>(LintGradleTask.groovy)
        at com.netflix.nebula.lint.plugin.LintGradleTask.<init>(LintGradleTask.groovy:47)
        at com.netflix.nebula.lint.plugin.LintGradleTask_Decorated.<init>(Unknown Source)
        at org.gradle.api.internal.DependencyInjectingInstantiator.newInstance(DependencyInjectingInstantiator.java:48)
        at org.gradle.api.internal.ClassGeneratorBackedInstantiator.newInstance(ClassGeneratorBackedInstantiator.java:36)
        at org.gradle.api.internal.project.taskfactory.TaskFactory$1.call(TaskFactory.java:121)

lint-stacktrace.txt

Thanks again for all the hard work you and your team is putting into this plugin!

Sean

Gradle 2.13 - ClassNotFoundException for org.gradle.logging

...
Caused by: java.lang.ClassNotFoundException: org.gradle.logging
   at com.netflix.nebula.lint.StyledTextService.<init>(StyledTextService.groovy:17)
   at com.netflix.nebula.lint.plugin.LintGradleTask$1.lintFinished(LintGradleTask.groovy:48)
...

Looks like you are accessing some gradle internal features, and that those are not working properly

java.lang.NoClassDefFoundError: groovyx/gpars/GParsPool

Same project and environment as #31, trying version 0.30.5:

:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test UP-TO-DATE
:check UP-TO-DATE
:lintGradleError from [com.netflix.nebula.lint.rule.GradleLintRule$1] processing source file [null]
 FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':lintGradle'.
> groovyx/gpars/GParsPool

* Try:
Run with --info or --debug option to get more log output.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':lintGradle'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
    at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:66)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:203)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:185)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:66)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:50)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:25)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:110)
    at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
    at org.gradle.execution.DefaultBuildExecuter.access$000(DefaultBuildExecuter.java:23)
    at org.gradle.execution.DefaultBuildExecuter$1.proceed(DefaultBuildExecuter.java:43)
    at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:30)
    at org.gradle.initialization.DefaultGradleLauncher$4.run(DefaultGradleLauncher.java:153)
    at org.gradle.internal.Factories$1.create(Factories.java:22)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:53)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:150)
    at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:32)
    at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:98)
    at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:92)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:63)
    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:92)
    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:83)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:99)
    at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:48)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:30)
    at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:81)
    at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:46)
    at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:52)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72)
    at org.gradle.util.Swapper.swap(Swapper.java:38)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.health.DaemonHealthTracker.execute(DaemonHealthTracker.java:47)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:60)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:72)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.health.HintGCAfterBuild.execute(HintGCAfterBuild.java:41)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
    at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:237)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
    at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
Caused by: java.lang.NoClassDefFoundError: groovyx/gpars/GParsPool
    at com.netflix.nebula.lint.rule.dependency.DependencyService.memoizedMethodPriv$artifactsByClassConfiguration(DependencyService.groovy:70)
    at com.netflix.nebula.lint.rule.dependency.DependencyService$_closure1.doCall(DependencyService.groovy)
    at com.netflix.nebula.lint.rule.dependency.DependencyService.artifactsByClass(DependencyService.groovy)
    at com.netflix.nebula.lint.rule.dependency.DependencyService$artifactsByClass$4.callCurrent(Unknown Source)
    at com.netflix.nebula.lint.rule.dependency.DependencyService.memoizedMethodPriv$classReferencesSourceSet(DependencyService.groovy:133)
    at com.netflix.nebula.lint.rule.dependency.DependencyService$_closure2.doCall(DependencyService.groovy)
    at com.netflix.nebula.lint.rule.dependency.DependencyService.classReferences(DependencyService.groovy)
    at com.netflix.nebula.lint.rule.dependency.DependencyService.memoizedMethodPriv$unusedDependenciesString(DependencyService.groovy:252)
    at com.netflix.nebula.lint.rule.dependency.DependencyService$_closure7.doCall(DependencyService.groovy)
    at com.netflix.nebula.lint.rule.dependency.DependencyService.unusedDependencies(DependencyService.groovy)
    at com.netflix.nebula.lint.rule.dependency.DependencyService$unusedDependencies$3.call(Unknown Source)
    at com.netflix.nebula.lint.rule.dependency.UnusedDependencyRule.visitGradleDependency(UnusedDependencyRule.groovy:50)
    at com.netflix.nebula.lint.rule.GradleLintRule.this$dist$invoke$4(GradleLintRule.groovy)
    at com.netflix.nebula.lint.rule.GradleLintRule$1.methodMissing(GradleLintRule.groovy)
    at com.netflix.nebula.lint.rule.GradleLintRule$1.this$dist$invoke$3(GradleLintRule.groovy)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$2.methodMissing(GradleLintRule.groovy)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$2.visitMethodCallInDependencies(GradleLintRule.groovy:384)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$2.visitMethodCallExpression(GradleLintRule.groovy:207)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$2.super$3$visitExpressionStatement(GradleLintRule.groovy)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$2.visitExpressionStatement(GradleLintRule.groovy:344)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$2.super$2$visitMethodCallExpression(GradleLintRule.groovy)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$2.visitMethodCallExpression(GradleLintRule.groovy:214)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$2.super$3$visitExpressionStatement(GradleLintRule.groovy)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$2.visitExpressionStatement(GradleLintRule.groovy:344)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$3$_visitConstructorOrMethod_closure11.doCall(GradleLintRule.groovy:464)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$3.both(GradleLintRule.groovy:408)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$3$both.callCurrent(Unknown Source)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$3.visitConstructorOrMethod(GradleLintRule.groovy:464)
    at com.netflix.nebula.lint.org.codenarc.rule.AbstractAstVisitor.visitMethod(AbstractAstVisitor.java:171)
    at com.netflix.nebula.lint.org.codenarc.rule.AbstractAstVisitor.visitClass(AbstractAstVisitor.java:148)
    at com.netflix.nebula.lint.org.codenarc.rule.AbstractAstVisitorRule.applyTo(AbstractAstVisitorRule.java:97)
    at com.netflix.nebula.lint.org.codenarc.rule.AbstractRule.applyTo(AbstractRule.java:142)
    at com.netflix.nebula.lint.org.codenarc.rule.Rule$applyTo$0.call(Unknown Source)
    at com.netflix.nebula.lint.rule.GradleLintRule.applyTo(GradleLintRule.groovy:134)
    at com.netflix.nebula.lint.org.codenarc.rule.Rule$applyTo$0.call(Unknown Source)
    at com.netflix.nebula.lint.org.codenarc.rule.Rule$applyTo$0.call(Unknown Source)
    at com.netflix.nebula.lint.org.codenarc.analyzer.AbstractSourceAnalyzer.collectViolations(AbstractSourceAnalyzer.groovy:40)
    at com.netflix.nebula.lint.plugin.LintService$ReportableAnalyzer.analyze(LintService.groovy:48)
    at com.netflix.nebula.lint.plugin.LintService$ReportableAnalyzer$analyze.call(Unknown Source)
    at com.netflix.nebula.lint.plugin.LintService$_lint_closure3.doCall(LintService.groovy:96)
    at com.netflix.nebula.lint.plugin.LintService.lint(LintService.groovy:93)
    at com.netflix.nebula.lint.plugin.LintService$lint.call(Unknown Source)
    at com.netflix.nebula.lint.plugin.LintGradleTask.lint(LintGradleTask.groovy:41)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:228)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:221)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:210)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:621)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:604)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
    ... 68 more


BUILD FAILED

Total time: 0.885 secs

I tried putting gpars on the buildclasspath:

buildscript {
  dependencies {
    classpath 'org.codehaus.gpars:gpars:1.2.1'
  }
}

and then the error changed to:

:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test UP-TO-DATE
:check UP-TO-DATE
:lintGradleError from [com.netflix.nebula.lint.rule.GradleLintRule$1] processing source file [null]
 FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':lintGradle'.
> org/objectweb/asm/ClassVisitor

* Try:
Run with --info or --debug option to get more log output.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':lintGradle'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
    at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:66)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:203)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:185)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:66)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:50)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:25)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:110)
    at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
    at org.gradle.execution.DefaultBuildExecuter.access$000(DefaultBuildExecuter.java:23)
    at org.gradle.execution.DefaultBuildExecuter$1.proceed(DefaultBuildExecuter.java:43)
    at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:30)
    at org.gradle.initialization.DefaultGradleLauncher$4.run(DefaultGradleLauncher.java:153)
    at org.gradle.internal.Factories$1.create(Factories.java:22)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:53)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:150)
    at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:32)
    at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:98)
    at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:92)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:63)
    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:92)
    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:83)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:99)
    at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:48)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:30)
    at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:81)
    at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:46)
    at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:52)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72)
    at org.gradle.util.Swapper.swap(Swapper.java:38)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.health.DaemonHealthTracker.execute(DaemonHealthTracker.java:47)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:60)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:72)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.health.HintGCAfterBuild.execute(HintGCAfterBuild.java:41)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
    at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:237)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
    at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
Caused by: java.lang.NoClassDefFoundError: org/objectweb/asm/ClassVisitor
    at com.netflix.nebula.lint.rule.dependency.DependencyService$2.visitFile(DependencyService.groovy:142)
    at com.netflix.nebula.lint.rule.dependency.DependencyService$2.visitFile(DependencyService.groovy)
    at java_nio_file_Files$walkFileTree.call(Unknown Source)
    at com.netflix.nebula.lint.rule.dependency.DependencyService.memoizedMethodPriv$classReferencesSourceSet(DependencyService.groovy:136)
    at com.netflix.nebula.lint.rule.dependency.DependencyService$_closure2.doCall(DependencyService.groovy)
    at com.netflix.nebula.lint.rule.dependency.DependencyService.classReferences(DependencyService.groovy)
    at com.netflix.nebula.lint.rule.dependency.DependencyService.memoizedMethodPriv$unusedDependenciesString(DependencyService.groovy:252)
    at com.netflix.nebula.lint.rule.dependency.DependencyService$_closure7.doCall(DependencyService.groovy)
    at com.netflix.nebula.lint.rule.dependency.DependencyService.unusedDependencies(DependencyService.groovy)
    at com.netflix.nebula.lint.rule.dependency.DependencyService$unusedDependencies$3.call(Unknown Source)
    at com.netflix.nebula.lint.rule.dependency.UnusedDependencyRule.visitGradleDependency(UnusedDependencyRule.groovy:50)
    at com.netflix.nebula.lint.rule.GradleLintRule.this$dist$invoke$4(GradleLintRule.groovy)
    at com.netflix.nebula.lint.rule.GradleLintRule$1.methodMissing(GradleLintRule.groovy)
    at com.netflix.nebula.lint.rule.GradleLintRule$1.this$dist$invoke$3(GradleLintRule.groovy)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$2.methodMissing(GradleLintRule.groovy)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$2.visitMethodCallInDependencies(GradleLintRule.groovy:384)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$2.visitMethodCallExpression(GradleLintRule.groovy:207)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$2.super$3$visitExpressionStatement(GradleLintRule.groovy)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$2.visitExpressionStatement(GradleLintRule.groovy:344)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$2.super$2$visitMethodCallExpression(GradleLintRule.groovy)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$2.visitMethodCallExpression(GradleLintRule.groovy:214)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$2.super$3$visitExpressionStatement(GradleLintRule.groovy)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$2.visitExpressionStatement(GradleLintRule.groovy:344)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$3$_visitConstructorOrMethod_closure11.doCall(GradleLintRule.groovy:464)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$3.both(GradleLintRule.groovy:408)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$3$both.callCurrent(Unknown Source)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$3.visitConstructorOrMethod(GradleLintRule.groovy:464)
    at com.netflix.nebula.lint.org.codenarc.rule.AbstractAstVisitor.visitMethod(AbstractAstVisitor.java:171)
    at com.netflix.nebula.lint.org.codenarc.rule.AbstractAstVisitor.visitClass(AbstractAstVisitor.java:148)
    at com.netflix.nebula.lint.org.codenarc.rule.AbstractAstVisitorRule.applyTo(AbstractAstVisitorRule.java:97)
    at com.netflix.nebula.lint.org.codenarc.rule.AbstractRule.applyTo(AbstractRule.java:142)
    at com.netflix.nebula.lint.org.codenarc.rule.Rule$applyTo$0.call(Unknown Source)
    at com.netflix.nebula.lint.rule.GradleLintRule.applyTo(GradleLintRule.groovy:134)
    at com.netflix.nebula.lint.org.codenarc.rule.Rule$applyTo$0.call(Unknown Source)
    at com.netflix.nebula.lint.org.codenarc.rule.Rule$applyTo$0.call(Unknown Source)
    at com.netflix.nebula.lint.org.codenarc.analyzer.AbstractSourceAnalyzer.collectViolations(AbstractSourceAnalyzer.groovy:40)
    at com.netflix.nebula.lint.plugin.LintService$ReportableAnalyzer.analyze(LintService.groovy:48)
    at com.netflix.nebula.lint.plugin.LintService$ReportableAnalyzer$analyze.call(Unknown Source)
    at com.netflix.nebula.lint.plugin.LintService$_lint_closure3.doCall(LintService.groovy:96)
    at com.netflix.nebula.lint.plugin.LintService.lint(LintService.groovy:93)
    at com.netflix.nebula.lint.plugin.LintService$lint.call(Unknown Source)
    at com.netflix.nebula.lint.plugin.LintGradleTask.lint(LintGradleTask.groovy:41)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:228)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:221)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:210)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:621)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:604)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
    ... 68 more
Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.ClassVisitor
    ... 118 more


BUILD FAILED

Total time: 1.707 secs

After putting asm on the classpath as well:

buildscript {
  dependencies {
    classpath 'org.codehaus.gpars:gpars:1.2.1'
    classpath 'org.ow2.asm:asm:5.1'
  }
}

I am back to square one (#31):

:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test UP-TO-DATE
:check UP-TO-DATE
:lintGradleError from [com.netflix.nebula.lint.rule.GradleLintRule$1] processing source file [null]
 FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':lintGradle'.
> org/hamcrest/SelfDescribing

* Try:
Run with --info or --debug option to get more log output.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':lintGradle'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
    at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:66)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:203)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:185)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:66)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:50)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:25)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:110)
    at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
    at org.gradle.execution.DefaultBuildExecuter.access$000(DefaultBuildExecuter.java:23)
    at org.gradle.execution.DefaultBuildExecuter$1.proceed(DefaultBuildExecuter.java:43)
    at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:30)
    at org.gradle.initialization.DefaultGradleLauncher$4.run(DefaultGradleLauncher.java:153)
    at org.gradle.internal.Factories$1.create(Factories.java:22)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:53)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:150)
    at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:32)
    at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:98)
    at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:92)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:63)
    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:92)
    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:83)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:99)
    at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:48)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:30)
    at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:81)
    at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:46)
    at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:52)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72)
    at org.gradle.util.Swapper.swap(Swapper.java:38)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.health.DaemonHealthTracker.execute(DaemonHealthTracker.java:47)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:60)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:72)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.health.HintGCAfterBuild.execute(HintGCAfterBuild.java:41)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
    at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:237)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
    at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
Caused by: java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
    at com.netflix.nebula.lint.rule.dependency.ClassHierarchyUtils.typeHierarchy(ClassHierarchyUtils.groovy:32)
    at com.netflix.nebula.lint.rule.dependency.ClassHierarchyUtils$typeHierarchy.call(Unknown Source)
    at com.netflix.nebula.lint.rule.dependency.DependencyClassVisitor.visit(DependencyClassVisitor.groovy:88)
    at org.objectweb.asm.ClassReader.accept(Unknown Source)
    at org.objectweb.asm.ClassReader.accept(Unknown Source)
    at org.objectweb.asm.ClassReader$accept.call(Unknown Source)
    at com.netflix.nebula.lint.rule.dependency.DependencyService$2.visitFile(DependencyService.groovy:143)
    at com.netflix.nebula.lint.rule.dependency.DependencyService$2.visitFile(DependencyService.groovy)
    at java_nio_file_Files$walkFileTree.call(Unknown Source)
    at com.netflix.nebula.lint.rule.dependency.DependencyService.memoizedMethodPriv$classReferencesSourceSet(DependencyService.groovy:136)
    at com.netflix.nebula.lint.rule.dependency.DependencyService$_closure2.doCall(DependencyService.groovy)
    at com.netflix.nebula.lint.rule.dependency.DependencyService.classReferences(DependencyService.groovy)
    at com.netflix.nebula.lint.rule.dependency.DependencyService.memoizedMethodPriv$usedDependenciesString(DependencyService.groovy:240)
    at com.netflix.nebula.lint.rule.dependency.DependencyService$_closure6.doCall(DependencyService.groovy)
    at com.netflix.nebula.lint.rule.dependency.DependencyService.usedDependencies(DependencyService.groovy)
    at com.netflix.nebula.lint.rule.dependency.DependencyService$usedDependencies$7.call(Unknown Source)
    at com.netflix.nebula.lint.rule.dependency.UnusedDependencyRule$_visitGradleDependency_closure1.doCall(UnusedDependencyRule.groovy:52)
    at com.netflix.nebula.lint.rule.dependency.UnusedDependencyRule.visitGradleDependency(UnusedDependencyRule.groovy:51)
    at com.netflix.nebula.lint.rule.GradleLintRule.this$dist$invoke$4(GradleLintRule.groovy)
    at com.netflix.nebula.lint.rule.GradleLintRule$1.methodMissing(GradleLintRule.groovy)
    at com.netflix.nebula.lint.rule.GradleLintRule$1.this$dist$invoke$3(GradleLintRule.groovy)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$2.methodMissing(GradleLintRule.groovy)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$2.visitMethodCallInDependencies(GradleLintRule.groovy:384)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$2.visitMethodCallExpression(GradleLintRule.groovy:207)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$2.super$3$visitExpressionStatement(GradleLintRule.groovy)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$2.visitExpressionStatement(GradleLintRule.groovy:344)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$2.super$2$visitMethodCallExpression(GradleLintRule.groovy)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$2.visitMethodCallExpression(GradleLintRule.groovy:214)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$2.super$3$visitExpressionStatement(GradleLintRule.groovy)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$2.visitExpressionStatement(GradleLintRule.groovy:344)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$3$_visitConstructorOrMethod_closure11.doCall(GradleLintRule.groovy:464)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$3.both(GradleLintRule.groovy:408)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$3$both.callCurrent(Unknown Source)
    at com.netflix.nebula.lint.rule.GradleLintRule$1$3.visitConstructorOrMethod(GradleLintRule.groovy:464)
    at com.netflix.nebula.lint.org.codenarc.rule.AbstractAstVisitor.visitMethod(AbstractAstVisitor.java:171)
    at com.netflix.nebula.lint.org.codenarc.rule.AbstractAstVisitor.visitClass(AbstractAstVisitor.java:148)
    at com.netflix.nebula.lint.org.codenarc.rule.AbstractAstVisitorRule.applyTo(AbstractAstVisitorRule.java:97)
    at com.netflix.nebula.lint.org.codenarc.rule.AbstractRule.applyTo(AbstractRule.java:142)
    at com.netflix.nebula.lint.org.codenarc.rule.Rule$applyTo$0.call(Unknown Source)
    at com.netflix.nebula.lint.rule.GradleLintRule.applyTo(GradleLintRule.groovy:134)
    at com.netflix.nebula.lint.org.codenarc.rule.Rule$applyTo$0.call(Unknown Source)
    at com.netflix.nebula.lint.org.codenarc.rule.Rule$applyTo$0.call(Unknown Source)
    at com.netflix.nebula.lint.org.codenarc.analyzer.AbstractSourceAnalyzer.collectViolations(AbstractSourceAnalyzer.groovy:40)
    at com.netflix.nebula.lint.plugin.LintService$ReportableAnalyzer.analyze(LintService.groovy:48)
    at com.netflix.nebula.lint.plugin.LintService$ReportableAnalyzer$analyze.call(Unknown Source)
    at com.netflix.nebula.lint.plugin.LintService$_lint_closure3.doCall(LintService.groovy:96)
    at com.netflix.nebula.lint.plugin.LintService.lint(LintService.groovy:93)
    at com.netflix.nebula.lint.plugin.LintService$lint.call(Unknown Source)
    at com.netflix.nebula.lint.plugin.LintGradleTask.lint(LintGradleTask.groovy:41)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:228)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:221)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:210)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:621)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:604)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
    ... 68 more
Caused by: java.lang.ClassNotFoundException: org.hamcrest.SelfDescribing
    ... 125 more


BUILD FAILED

Total time: 2.383 secs

And putting hamcrest on the buildclasspath does not change the outcome.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.