java.lang.IllegalArgumentException: path may not be null or empty string. path='null'
at org.gradle.api.internal.file.BaseDirFileResolver.doResolve(BaseDirFileResolver.java:72)
at org.gradle.api.internal.file.AbstractFileResolver.resolve(AbstractFileResolver.java:79)
at org.gradle.api.internal.file.AbstractFileResolver.resolve(AbstractFileResolver.java:61)
at org.gradle.api.internal.tasks.CompositeTaskOutputPropertySpec$1.computeNext(CompositeTaskOutputPropertySpec.java:66)
at org.gradle.api.internal.tasks.CompositeTaskOutputPropertySpec$1.computeNext(CompositeTaskOutputPropertySpec.java:56)
at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
at com.google.common.collect.Iterators$5.hasNext(Iterators.java:542)
at org.gradle.api.internal.tasks.TaskPropertyUtils.collectFileProperties(TaskPropertyUtils.java:33)
at org.gradle.api.internal.tasks.DefaultTaskOutputs.getFileProperties(DefaultTaskOutputs.java:151)
at org.gradle.api.internal.changedetection.state.CacheBackedTaskHistoryRepository.getOutputPropertyNamesForCacheKey(CacheBackedTaskHistoryRepository.java:148)
at org.gradle.api.internal.changedetection.state.CacheBackedTaskHistoryRepository.getHistory(CacheBackedTaskHistoryRepository.java:69)
at org.gradle.api.internal.changedetection.changes.DefaultTaskArtifactStateRepository.getStateFor(DefaultTaskArtifactStateRepository.java:63)
at org.gradle.api.internal.changedetection.changes.ShortCircuitTaskArtifactStateRepository.getStateFor(ShortCircuitTaskArtifactStateRepository.java:47)
at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:43)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:51)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.execute(DefaultTaskGraphExecuter.java:236)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.execute(DefaultTaskGraphExecuter.java:228)
at org.gradle.internal.Transformers$4.transform(Transformers.java:169)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:106)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:61)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:228)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:215)
at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:77)
at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:58)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:32)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:113)
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$3.execute(DefaultGradleLauncher.java:196)
at org.gradle.initialization.DefaultGradleLauncher$3.execute(DefaultGradleLauncher.java:193)
at org.gradle.internal.Transformers$4.transform(Transformers.java:169)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:106)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:56)
at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:193)
at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:119)
at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:102)
at org.gradle.launcher.exec.GradleBuildController.run(GradleBuildController.java:71)
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:41)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26)
at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:75)
at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:49)
at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:44)
at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:29)
at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:67)
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:47)
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.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
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.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:297)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
apply plugin: "com.github.spotbugs"
apply plugin: 'checkstyle'
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "gradle.plugin.com.github.spotbugs:gradlePlugin:1.4"
}
}
def lintReportDir = new File(buildDir, 'reports/lint')
spotbugs {
toolVersion = '3.1.0-RC6'
reportsDir = lintReportDir
effort = "max"
reportLevel = "high"
}
task spotbugs(type: com.github.spotbugs.SpotBugsTask) {
classes = fileTree('build/intermediates/classes/debug/')
source = fileTree('src/main/java')
ignoreFailures = true
classpath = files()
reports {
xml.enabled true
xml.withMessages true
}
excludeFilter = file("$rootProject.projectDir/config/findbugs-android-exclude.xml")
}
checkstyle {
configFile rootProject.file('config/checkstyle.xml')
reportsDir lintReportDir
}
task checkStyle(type: Checkstyle) {
source fileTree('src/main/java')
ignoreFailures true
classpath = files()
}
apply from:"${project.rootDir}/lint.gradle"
really strange, stacktrace does not contain our spotbugs package...
classpath = files() seems strange, what's your purpose?@KengoTODA
@LintaoLin You missed reports.xml.destination and spotbugsClasspath in your build script.
diff --git a/lint.gradle b/lint.gradle
index 855cc47..f0fa685 100644
--- a/lint.gradle
+++ b/lint.gradle
@@ -20,7 +20,7 @@ spotbugs {
}
task spotbugs(type: com.github.spotbugs.SpotBugsTask) {
-
+ spotbugsClasspath = buildscript.configurations.classpath
pluginClasspath = project.configurations.spotbugsPlugins
classpath = files()
classes = fileTree("$project.buildDir/intermediates/classes/debug/")
@@ -28,7 +28,8 @@ task spotbugs(type: com.github.spotbugs.SpotBugsTask) {
ignoreFailures = true
reports {
xml.enabled true
+ xml.destination "$project.buildDir/reports/spotbugs.xml"
xml.withMessages true
}
excludeFilter = file("$rootProject.projectDir/config/findbugs-android-exclude.xml")
personal note: we cannot find spotbugsMain task nor spotbugsTest task in this project, because this project does not depend on java Gradle plugin which is incompatible with android plugin. This is why we need to define task with com.github.spotbugs.SpotBugsTask type and specify all fields for it.
@KengoTODA this resolve my problem, thank you for patience。
@LintaoLin I found another solution, which may more simple for you.
sourceSets to app/build.gradle, andtask spotbugs in lint.gradle to tasks.withType in app/build.gradleThen spotbugs gradle plugin generates spotbugsMain task and spotbugsTest task with default configuration. So you don't need to set all configurations explicitly. I've confirmed that this can generate app/build/reports/lint/main.xml and app/build/reports/lint/test.xml.
My guess is that, android gradle plugin does not configure sourceSets but java plugin does. If so, I will update document for android users.
UPDATE: my guess was right, here is related part in JavaPlugin.java
diff --git a/app/build.gradle b/app/build.gradle
index bb18146..4ba7ee9 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,5 +1,18 @@
apply plugin: 'com.android.application'
+sourceSets {
+ main {
+ java {
+ srcDirs = ['src/main/java']
+ }
+ }
+ test {
+ java {
+ srcDirs = ['src/test/java']
+ }
+ }
+}
+
android {
compileSdkVersion 26
buildToolsVersion "26.0.1"
@@ -31,6 +44,17 @@ dependencies {
apply from:"${project.rootDir}/lint.gradle"
+tasks.withType(com.github.spotbugs.SpotBugsTask) {
+ classes = fileTree("$project.buildDir/intermediates/classes/debug/")
+ ignoreFailures = true
+ reports {
+ xml.enabled true
+ xml.withMessages true
+ }
+ excludeFilter = file("$rootProject.projectDir/config/findbugs-android-exclude.xml")
+}
+
//apply plugin: "com.github.spotbugs"
//
diff --git a/lint.gradle b/lint.gradle
index a8b12a7..ca29901 100644
--- a/lint.gradle
+++ b/lint.gradle
@@ -18,18 +18,3 @@ spotbugs {
effort = "max"
reportLevel = "high"
}
-
-task spotbugs(type: com.github.spotbugs.SpotBugsTask) {
- spotbugsClasspath = buildscript.configurations.classpath
- pluginClasspath = project.configurations.spotbugsPlugins
- classpath = files()
- classes = fileTree("$project.buildDir/intermediates/classes/debug/")
- source = fileTree('src/main/java')
- ignoreFailures = true
- reports {
- xml.enabled true
- xml.destination "$project.buildDir/reports/spotbugs.xml"
- xml.withMessages true
- }
- excludeFilter = file("$rootProject.projectDir/config/findbugs-android-exclude.xml")
-}
I tried the method you said, but it still has the error : path may not be null or empty string. path='null'. Can you help me?
gradle version is 5.1.1
created a demo to reproduce it at CatchBug
Thanks for sharing project to reproduce problems, but I'm not Android-er then I cannot use it... I personally hope that you'll propose a PR to fix.
Most helpful comment
@LintaoLin You missed
reports.xml.destinationandspotbugsClasspathin your build script.