Open ZOlbrys opened 5 years ago
Thanks for opening your first issue here! :smiley: Please check our contributing guideline. Especially when you report a problem, make sure you share a Minimal, Complete, and Verifiable example to reproduce it in this issue.
@ZOlbrys please define sourceSet
that is not generated by Android gradle plugin. Here we have document that describes how-to.
@KengoTODA Thanks for the response. I've added this, and now encounter a new error:
Zachs-MBP:SpotbugsExample Zach$ ./gradlew spotbugsMain
> Task :app:compileJava FAILED
/Users/zach/Developer/Code/SpotbugsExample/app/src/main/java/com/example/zach/spotbugsexample/MainActivity.java:3: error: package android.support.v7.app does not exist
import android.support.v7.app.AppCompatActivity;
^
/Users/zach/Developer/Code/SpotbugsExample/app/src/main/java/com/example/zach/spotbugsexample/MainActivity.java:4: error: package android.os does not exist
import android.os.Bundle;
^
/Users/zach/Developer/Code/SpotbugsExample/app/src/main/java/com/example/zach/spotbugsexample/MainActivity.java:6: error: cannot find symbol
public class MainActivity extends AppCompatActivity {
^
symbol: class AppCompatActivity
/Users/zach/Developer/Code/SpotbugsExample/app/src/main/java/com/example/zach/spotbugsexample/MainActivity.java:9: error: cannot find symbol
protected void onCreate(Bundle savedInstanceState) {
^
symbol: class Bundle
location: class MainActivity
/Users/zach/Developer/Code/SpotbugsExample/app/src/main/java/com/example/zach/spotbugsexample/MainActivity.java:8: error: method does not override or implement a method from a supertype
@Override
^
/Users/zach/Developer/Code/SpotbugsExample/app/src/main/java/com/example/zach/spotbugsexample/MainActivity.java:10: error: cannot find symbol
super.onCreate(savedInstanceState);
^
symbol: variable super
location: class MainActivity
/Users/zach/Developer/Code/SpotbugsExample/app/src/main/java/com/example/zach/spotbugsexample/MainActivity.java:11: error: package R does not exist
setContentView(R.layout.activity_main);
^
7 errors
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:compileJava'.
> Compilation failed; see the compiler error output for details.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 0s
It looks like it's unable to find the sources/code for most of the android related classes.
Thanks for your report, I also reproduced this problem in my local.
Then maybe we are facing something unknown, I'll wait contribution from gradle/android experts...
I experienced the same issue today. I'm not sure if it's a problem with spotbugs or something else, because the actual task that is failing for both @ZOlbrys and me is Execution failed for task ':app:compileJava'.
Upon further inspection, the :mobile:compileJava
task didn't exist before adding spotbugs. Diffing the output of gradlew.bat tasks --all
before and after adding spotbugs, these tasks are new:
mobile:spotbugsMain - Run SpotBugs analysis for main classes
mobile:checkstyleMain - Run Checkstyle analysis for main classes
mobile:pmdMain - Run PMD analysis for main classes
mobile:classes - Assembles main classes.
mobile:compileJava - Compiles main Java source.
mobile:processResources - Processes main resources.
Those tasks all fail because mobile:compileJava
fails. Android gradle seems to have the following tasks to compile Java, maybe spotbugs should be dependent on one of them instead of :mobile:compileJava
:
mobile:compileDebugAndroidTestJavaWithJavac
mobile:compileDebugJavaWithJavac
mobile:compileDebugUnitTestJavaWithJavac
mobile:compileReleaseJavaWithJavac
mobile:compileReleaseUnitTestJavaWithJavac
Adding the following task to my gradle file allowed spotbugs to run correctly:
task compileJava(overwrite: true) {
dependsOn 'compileDebugJavaWithJavac'
group = "build"
}
@AEFeinstein interesting - I'm still not getting this to work! I added that to my test project, but now I get this error:
Zachs-MBP:SpotbugsExample Zach$ ./gradlew spotbugsMain
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:spotbugsMain'.
> com.github.spotbugs.internal.SpotBugsReportsInternal.getEnabledReports()Ljava/util/Map;
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 0s
16 actionable tasks: 1 executed, 15 up-to-date
Zachs-MBP:SpotbugsExample Zach$
Is my gradle file setup incorrectly? I wasn't able to find exact documentation on this stuff.
@ZOlbrys I can't debug your particular problem, but here's my project with the plugin working https://github.com/AEFeinstein/mtg-familiar You can compare our gradle files and hopefully figure it out.
@AEFeinstein Thanks for reaching out! I saw the files your gradle files and setup mine in a similar manner. I still see the same error though - so no progress, maybe. @KengoTODA any thoughts on the issue above? https://github.com/spotbugs/spotbugs-gradle-plugin/issues/90#issuecomment-451626664
No idea, I'm not Android guy...
@ZOlbrys what happens when you run gradlew.bat compileDebugJavaWithJavac
and gradlew.bat compileJava
?
@KengoTODA understood - thanks for the support so far though! Appreciate it :)
@AEFeinstein good news! I upgraded to Android Studio 3.3, and then ran the commands and that seems to have fixed my problem. I think the Android Studio update helped more than anything else - I see you were using a newer version of gradle as well... Anyways, I am able to run the tool now and verified that bugs are being reported.
Thanks for the assistance!
note @AEFeinstein has it wrong..
missing stuff wrap it the same way you flavors with buildtypes and one needs to add
variant.javaCompiler files to classpath for other project modules also need classpath as it will no even run without that
my first run I just did it with the buildType of variant and got it to run correctly now polishing it so it does product flavors correctly along with proper task renaming to spotbugsBuildTypeVariant task
also note do a first run so that you know what to set the filter file to as you want to exclude the all the android lib stuff and your 3rd party libs
However, I can confirm its working which is nice cause I still have problems attempting to use errorprone with kotlin right now..so its life saver
if anyone wants to take a look, the project I am putting it into with the polished modifications of task setup is at my gitlab project of
https://gitlab.com/fred.grott/droikotlinkit
also note my solution points to the kotlin java classes correctly
so I hope it helps those who are still stuck with it not working..
just call me Android Gradle-Plugin expert :)
I would like to use spotbugs in our Android application, but creating a sourceSet and a javaCompile task for this seems so wrong.
If the SpotBugsTask would have a setter for the sourceDirs
field, without using SourceSets
we could get the required input from the AndroidSourceSets
. Unfortunately the AndroidSourceSet
does not implement the plain gradle SourceSet
, so this does not work.
We can directly call setSource
on the Task, but then spotbugs complains here: https://github.com/spotbugs/spotbugs-gradle-plugin/blob/0a05ab78a62aef320f503f9ebc11c0f427e7d3be/src/main/java/com/github/spotbugs/SpotBugsTask.java#L330
that sourceDirs
is not set. I actually don't understand the use for the sourceDir
variable, because the setSourceSet
also calls setSource
. So in getAllSource
the sources are added twice?
So if the SpotbugsTask either
setSource
method with a Set<File>
parameteror
sourceDirs
variable in getAllSource
we could easily get Spotbugs to work with Android.
@MatFl I also came to the same conclusion: If there is no sourceSet set, the sourceDirs
Set
will be uninitialized. From my point of view, initializing it in the constructor with new HashSet()
or Collections.emptySet()
should do the trick.
okay let me add a brief code ex
its a multi module project with no app flavors
project.extensions.extraProperties.set('SpotBugsTask', com.github.spotbugs.SpotBugsTask)
spotbugs {
toolVersion = '3.1.10'
ignoreFailures = false
excludeFilter = file("${rootDir}/config/findbugs-exclude-filter.xml")
// Search better
effort = 'max'
// Report all
reportLevel = 'low'
}
sourceSets {
// we define `main` sourceSet here, so SpotBugs Gradle Plugin generates `spotbugsMain` task
main {
java.srcDirs = ['src/main/java']
}
}
tasks.withType(com.github.spotbugs.SpotBugsTask) {
dependsOn 'assembleDebug'
group = "verification"
classes = fileTree("build/inteermediates/javac/debug/") + fileTree("build/tmp/kotlin-classes/debug/")
ignoreFailures = true
classpath = files()
// configure automatically generated tasks
reports {
xml.enabled = false
html.enabled = true
html {
destination file("$project.buildDir/outputs/reports/spotbugs/spotbugs-debug.html")
stylesheet resources.text.fromFile("$rootDir/config/fancy.xsl")
}
}
}
task compileJava(overwrite: true) {
dependsOn 'compileDebugJavaWithJavac'
group = "build"
}
so that is the general setup and works fine, note you will get a xerces xml parse warning on the referenced android framework classes but that can be ignored as far as I know
Defining a java sourceSet and compiling the java task is (in my opinion) nothing more than a dirty workaround. Android already defines sourceSets and build tasks, which however aren't compatible with the java ones. It would be trivial to use them if the SpotbugsTask would provide one of the solutions I mentioned above...
I agree with @MatFl . Before changing how getAllSource()
behaves, SpotBugs worked well in our multi module Android project. It broke after updating the Spotbugs Gradle Plugin.
@WonderCsabo which version was working with your project? In my understanding, this plugin already behaved so when our organization forked.
Plugin Version 1.6.6 . It broke when changes added for getAllSource()
, as explained above.
Nice share! It'll help our investigation.
Hi. I want to share my configuration of spotbugs for android project: https://gist.github.com/mik9/fdde79052fef7f03c4325734701a39d7
Latest working plugin version: 1.6.6. Maybe it helps.
Starting with 1.6.9 I do get
Error while evaluating property 'allSource' of task ':spotbugsGplayDebug'
> path may not be null or empty string. path='null'
which was fine on 1.6.6.
Config:
android.applicationVariants.all { variant ->
String variantName = variant.name
String capVariantName = variantName.substring(0, 1).toUpperCase() + variantName.substring(1);
tasks.register("spotbugs${capVariantName}", SpotBugsTask) {
ignoreFailures = false
effort = "max"
reportLevel = "medium"
classes = fileTree("$project.buildDir/intermediates/javac/${variantName}/compile${capVariantName}JavaWithJavac/classes/")
excludeFilter = file("${project.rootDir}/findbugs-filter.xml")
pluginClasspath = project.configurations.spotbugsPlugins
source = fileTree('src/main/java')
classpath = files()
include '**/*.java'
exclude '**/gen/**'
reports {
xml.enabled = false
html.enabled = true
html {
destination = file("$project.buildDir/reports/spotbugs/spotbugs.html")
}
}
}
}
Android Studio 3.4 gradle-5.1.1 classpath 'gradle.plugin.com.github.spotbugs:spotbugs-gradle-plugin:1.6.6' toolVersion = "3.1.12" used product flavours.
All versions that are newer than 1.6.6 do not work.
Sorry, no help only observations: Why is this so difficult? Why is there no graceful AND meaningful (by that I mean output any semi-layman could read and understand) output. I call this trouble shooting at the DNA level/cellular level instead of the component level. I was truly saddened when I read "good news! I upgraded to Android Studio 3.3, and then ran the commands and that seems to have fixed my problem.". Imo, sadly nothing has fundamentally change in this 'area' in 35+ years. And this is even sadder. :(
Hello all, check #180 and help us to confirm that new plugin works with Android project. We'll release stable version right after SpotBugs 4.0.0 release.
Hi, I tried to use the SpotBugs Gradle Plugin v4.0.2 (which is SpotBugs 4.0.0) in a single Android project and got some errors like below:
* What went wrong:
Execution failed for task ':SpotBugsReports'.
> A failure occurred while executing com.github.spotbugs.snom.internal.SpotBugsRunnerForWorker$SpotBugsExecutor
> Failed to run Gradle Worker Daemon
> Process 'Gradle Worker Daemon 4' finished with non-zero exit value 1
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
My build.gradle
file is like below:
buildscript {
ext.kotlin_version = "1.3.30"
repositories {
google()
jcenter()
mavenCentral()
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "com.android.tools.build:gradle:3.6.1"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "com.google.gms:google-services:4.3.3"
classpath "gradle.plugin.com.github.spotbugs.snom:spotbugs-gradle-plugin:4.0.2"
}
}
apply plugin: "com.github.spotbugs"
tasks.withType(com.github.spotbugs.snom.SpotBugsTask) {
classes = files("$project.buildDir/intermediates/javac")
// source = fileTree('src/main/java')
reports {
// Enable HTML report only
html.enabled = true
xml.enabled = false
}
}
task SpotBugsReports(type: com.github.spotbugs.snom.SpotBugsTask) {
classes = files("$project.buildDir/intermediates/javac")
// source = fileTree("src/main/java")
reports {
html.enabled = true
xml.enabled = false
}
}
The reason I commented the source
property is that if I uncomment them, another error pops up like below:
> Could not set unknown property 'source' for task ':SpotBugsReports' of type com.github.spotbugs.snom.SpotBugsTask.
I don't know why but I can't set the source
property. Is there anyone with this issue here?
@henrychoi7 Not only 4.0.2
but also 3.0.0
has no source
property, in my understanding...
Let me confirm what is your expectation. Do you want to set the source directory to analyse?
Then sourceDirs
should be the one.
https://spotbugs-gradle-plugin.netlify.com/com/github/spotbugs/snom/spotbugstask.html#sourceDirs
@KengoTODA Thank you!
I'll keep in mind with the reference. I was trying to set the source directory. But then again, if I type the command ./gradlew SpotBugsReports
, I get the following error like below:
* What went wrong:
A problem occurred evaluating project ':app'.
> com/android/build/gradle/tasks/AndroidJavaCompile
* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Exception is:
org.gradle.api.GradleScriptException: A problem occurred evaluating project ':app'.
at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:93)
at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl$2.run(DefaultScriptPluginFactory.java:227)
at org.gradle.configuration.ProjectScriptTarget.addConfiguration(ProjectScriptTarget.java:77)
at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:232)
at org.gradle.configuration.BuildOperationScriptPlugin$1$1.run(BuildOperationScriptPlugin.java:69)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.configuration.BuildOperationScriptPlugin$1.execute(BuildOperationScriptPlugin.java:66)
at org.gradle.configuration.BuildOperationScriptPlugin$1.execute(BuildOperationScriptPlugin.java:63)
at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.apply(DefaultUserCodeApplicationContext.java:49)
at org.gradle.configuration.BuildOperationScriptPlugin.apply(BuildOperationScriptPlugin.java:63)
at org.gradle.configuration.project.BuildScriptProcessor$1.run(BuildScriptProcessor.java:45)
at org.gradle.internal.Factories$1.create(Factories.java:26)
at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withMutableState(DefaultProjectStateRegistry.java:201)
at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withMutableState(DefaultProjectStateRegistry.java:187)
at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:42)
at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:26)
at org.gradle.configuration.project.ConfigureActionsProjectEvaluator.evaluate(ConfigureActionsProjectEvaluator.java:35)
at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject$1.run(LifecycleProjectEvaluator.java:107)
at org.gradle.internal.Factories$1.create(Factories.java:26)
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:189)
at org.gradle.internal.work.StopShieldingWorkerLeaseService.withLocks(StopShieldingWorkerLeaseService.java:40)
at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withProjectLock(DefaultProjectStateRegistry.java:227)
at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withMutableState(DefaultProjectStateRegistry.java:221)
at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withMutableState(DefaultProjectStateRegistry.java:187)
at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject.run(LifecycleProjectEvaluator.java:96)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:68)
at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:693)
at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:141)
at org.gradle.execution.TaskPathProjectEvaluator.configure(TaskPathProjectEvaluator.java:36)
at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:64)
at org.gradle.configuration.DefaultProjectsPreparer.prepareProjects(DefaultProjectsPreparer.java:55)
at org.gradle.configuration.BuildOperatingFiringProjectsPreparer$ConfigureBuild.run(BuildOperatingFiringProjectsPreparer.java:52)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.configuration.BuildOperatingFiringProjectsPreparer.prepareProjects(BuildOperatingFiringProjectsPreparer.java:40)
at org.gradle.initialization.DefaultGradleLauncher.prepareProjects(DefaultGradleLauncher.java:198)
at org.gradle.initialization.DefaultGradleLauncher.doClassicBuildStages(DefaultGradleLauncher.java:138)
at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:126)
at org.gradle.initialization.DefaultGradleLauncher.executeTasks(DefaultGradleLauncher.java:106)
at org.gradle.internal.invocation.GradleBuildController$1.execute(GradleBuildController.java:60)
at org.gradle.internal.invocation.GradleBuildController$1.execute(GradleBuildController.java:57)
at org.gradle.internal.invocation.GradleBuildController$3.create(GradleBuildController.java:85)
at org.gradle.internal.invocation.GradleBuildController$3.create(GradleBuildController.java:78)
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:189)
at org.gradle.internal.work.StopShieldingWorkerLeaseService.withLocks(StopShieldingWorkerLeaseService.java:40)
at org.gradle.internal.invocation.GradleBuildController.doBuild(GradleBuildController.java:78)
at org.gradle.internal.invocation.GradleBuildController.run(GradleBuildController.java:57)
at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:31)
at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
at org.gradle.launcher.exec.BuildOutcomeReportingBuildActionRunner.run(BuildOutcomeReportingBuildActionRunner.java:63)
at org.gradle.tooling.internal.provider.ValidatingBuildActionRunner.run(ValidatingBuildActionRunner.java:32)
at org.gradle.launcher.exec.BuildCompletionNotifyingBuildActionRunner.run(BuildCompletionNotifyingBuildActionRunner.java:39)
at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:51)
at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:45)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:45)
at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:50)
at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:47)
at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:78)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:47)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:31)
at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:42)
at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:28)
at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:78)
at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:52)
at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:59)
at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:36)
at org.gradle.tooling.internal.provider.SessionScopeBuildActionExecuter.execute(SessionScopeBuildActionExecuter.java:68)
at org.gradle.tooling.internal.provider.SessionScopeBuildActionExecuter.execute(SessionScopeBuildActionExecuter.java:38)
at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:37)
at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:26)
at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:43)
at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:29)
at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:60)
at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:32)
at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:55)
at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:41)
at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:48)
at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:32)
at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:68)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:39)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:27)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:35)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:78)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:75)
at org.gradle.util.Swapper.swap(Swapper.java:38)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:75)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:63)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:82)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:52)
at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:297)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
Caused by: java.lang.NoClassDefFoundError: com/android/build/gradle/tasks/AndroidJavaCompile
at com.github.spotbugs.snom.internal.SpotBugsTaskFactory.lambda$generateForAndroid$5(SpotBugsTaskFactory.java:72)
at org.gradle.api.internal.DefaultCollectionCallbackActionDecorator$BuildOperationEmittingAction$1$1.run(DefaultCollectionCallbackActionDecorator.java:100)
at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.reapply(DefaultUserCodeApplicationContext.java:60)
at org.gradle.api.internal.DefaultCollectionCallbackActionDecorator$BuildOperationEmittingAction$1.run(DefaultCollectionCallbackActionDecorator.java:97)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
at org.gradle.api.internal.DefaultCollectionCallbackActionDecorator$BuildOperationEmittingAction.execute(DefaultCollectionCallbackActionDecorator.java:94)
at org.gradle.api.internal.collections.CollectionFilter$1.execute(CollectionFilter.java:59)
at org.gradle.api.internal.DefaultDomainObjectCollection.all(DefaultDomainObjectCollection.java:163)
at org.gradle.api.internal.plugins.DefaultPluginContainer$2.execute(DefaultPluginContainer.java:177)
at org.gradle.api.internal.plugins.DefaultPluginContainer$2.execute(DefaultPluginContainer.java:169)
at org.gradle.api.internal.DefaultCollectionCallbackActionDecorator$BuildOperationEmittingAction$1$1.run(DefaultCollectionCallbackActionDecorator.java:100)
at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.reapply(DefaultUserCodeApplicationContext.java:60)
at org.gradle.api.internal.DefaultCollectionCallbackActionDecorator$BuildOperationEmittingAction$1.run(DefaultCollectionCallbackActionDecorator.java:97)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
at org.gradle.api.internal.DefaultCollectionCallbackActionDecorator$BuildOperationEmittingAction.execute(DefaultCollectionCallbackActionDecorator.java:94)
at org.gradle.api.internal.DefaultDomainObjectCollection.all(DefaultDomainObjectCollection.java:163)
at org.gradle.api.internal.plugins.DefaultPluginContainer.withId(DefaultPluginContainer.java:181)
at com.github.spotbugs.snom.internal.SpotBugsTaskFactory.generateForAndroid(SpotBugsTaskFactory.java:68)
at com.github.spotbugs.snom.internal.SpotBugsTaskFactory.generate(SpotBugsTaskFactory.java:31)
at com.github.spotbugs.snom.SpotBugsPlugin.createTasks(SpotBugsPlugin.java:49)
at com.github.spotbugs.snom.SpotBugsPlugin.apply(SpotBugsPlugin.java:45)
at com.github.spotbugs.snom.SpotBugsPlugin.apply(SpotBugsPlugin.java:23)
at org.gradle.api.internal.plugins.ImperativeOnlyPluginTarget.applyImperative(ImperativeOnlyPluginTarget.java:43)
at org.gradle.api.internal.plugins.RuleBasedPluginTarget.applyImperative(RuleBasedPluginTarget.java:51)
at org.gradle.api.internal.plugins.DefaultPluginManager.addPlugin(DefaultPluginManager.java:181)
at org.gradle.api.internal.plugins.DefaultPluginManager.access$300(DefaultPluginManager.java:51)
at org.gradle.api.internal.plugins.DefaultPluginManager$AddPluginBuildOperation.run(DefaultPluginManager.java:276)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.api.internal.plugins.DefaultPluginManager$2.execute(DefaultPluginManager.java:159)
at org.gradle.api.internal.plugins.DefaultPluginManager$2.execute(DefaultPluginManager.java:156)
at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.apply(DefaultUserCodeApplicationContext.java:49)
at org.gradle.api.internal.plugins.DefaultPluginManager.doApply(DefaultPluginManager.java:156)
at org.gradle.api.internal.plugins.DefaultPluginManager.apply(DefaultPluginManager.java:136)
at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.applyType(DefaultObjectConfigurationAction.java:129)
at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.access$200(DefaultObjectConfigurationAction.java:38)
at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction$3.run(DefaultObjectConfigurationAction.java:93)
at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.execute(DefaultObjectConfigurationAction.java:152)
at org.gradle.api.internal.project.AbstractPluginAware.apply(AbstractPluginAware.java:49)
at org.gradle.api.internal.project.ProjectScript.apply(ProjectScript.java:41)
at org.gradle.api.Script$apply.callCurrent(Unknown Source)
at build_1dpe2085z9d703ego26q3jczw.run(/Users/xx/xx/app/build.gradle:129)
at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:91)
... 129 more
Therefore, I can't set apply plugin: "com.github.spotbugs"
in the build.gradle
(app). Any ideas to this type of issue? If I set apply plugin: "com.github.spotbugs"
in the build.gradle
(project), it doesn't show the error (but it throws another error). Another error looks like below:
* What went wrong:
Execution failed for task ':app:SpotBugsReports'.
> No value has been specified for this provider.
* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:SpotBugsReports'.
at org.gradle.execution.plan.DefaultExecutionPlan.resolveMutations(DefaultExecutionPlan.java:658)
at org.gradle.execution.plan.DefaultExecutionPlan.getResolvedMutationInfo(DefaultExecutionPlan.java:594)
at org.gradle.execution.plan.DefaultExecutionPlan.selectNext(DefaultExecutionPlan.java:549)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$2.transform(DefaultPlanExecutor.java:176)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$2.transform(DefaultPlanExecutor.java:163)
at org.gradle.internal.resources.DefaultResourceLockCoordinationService.withStateLock(DefaultResourceLockCoordinationService.java:45)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:163)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:129)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
Caused by: java.lang.IllegalStateException: No value has been specified for this provider.
at org.gradle.api.internal.provider.Providers$1.get(Providers.java:32)
at org.gradle.api.internal.provider.DefaultProperty.get(DefaultProperty.java:157)
at org.gradle.api.internal.provider.AbstractMappingProvider.get(AbstractMappingProvider.java:45)
at org.gradle.api.internal.provider.AbstractMappingProvider.get(AbstractMappingProvider.java:45)
at org.gradle.api.internal.provider.AbstractMappingProvider.get(AbstractMappingProvider.java:45)
at org.gradle.api.internal.provider.DefaultProperty.get(DefaultProperty.java:157)
at com.github.spotbugs.snom.SpotBugsReport.getDestination(SpotBugsReport.java:59)
at com.github.spotbugs.snom.internal.SpotBugsHtmlReport_Decorated.getDestination(Unknown Source)
at org.gradle.api.internal.tasks.properties.bean.AbstractNestedRuntimeBeanNode$BeanPropertyValue$1$1.create(AbstractNestedRuntimeBeanNode.java:80)
at org.gradle.util.SingleMessageLogger.whileDisabled(SingleMessageLogger.java:467)
at org.gradle.api.internal.tasks.properties.bean.AbstractNestedRuntimeBeanNode$BeanPropertyValue$1.get(AbstractNestedRuntimeBeanNode.java:76)
at com.google.common.base.Suppliers$NonSerializableMemoizingSupplier.get(Suppliers.java:167)
at org.gradle.api.internal.tasks.properties.bean.AbstractNestedRuntimeBeanNode$BeanPropertyValue.call(AbstractNestedRuntimeBeanNode.java:148)
at org.gradle.util.GUtil.uncheckedCall(GUtil.java:461)
at org.gradle.util.DeferredUtil.unpackNestableDeferred(DeferredUtil.java:64)
at org.gradle.util.DeferredUtil.unpack(DeferredUtil.java:38)
at org.gradle.api.internal.tasks.properties.FileParameterUtils.resolveOutputFilePropertySpecs(FileParameterUtils.java:109)
at org.gradle.execution.plan.DefaultExecutionPlan$8$1.run(DefaultExecutionPlan.java:619)
at org.gradle.execution.plan.DefaultExecutionPlan.withDeadlockHandling(DefaultExecutionPlan.java:679)
at org.gradle.execution.plan.DefaultExecutionPlan.access$900(DefaultExecutionPlan.java:90)
at org.gradle.execution.plan.DefaultExecutionPlan$8.visitOutputFileProperty(DefaultExecutionPlan.java:612)
at org.gradle.api.internal.tasks.properties.annotations.AbstractOutputPropertyAnnotationHandler.visitPropertyValue(AbstractOutputPropertyAnnotationHandler.java:51)
at org.gradle.api.internal.tasks.properties.bean.AbstractNestedRuntimeBeanNode.visitProperties(AbstractNestedRuntimeBeanNode.java:59)
at org.gradle.api.internal.tasks.properties.bean.NestedRuntimeBeanNode.visitNode(NestedRuntimeBeanNode.java:42)
at org.gradle.api.internal.tasks.properties.DefaultPropertyWalker.visitProperties(DefaultPropertyWalker.java:41)
at org.gradle.api.internal.tasks.TaskPropertyUtils.visitProperties(TaskPropertyUtils.java:42)
at org.gradle.execution.plan.DefaultExecutionPlan.resolveMutations(DefaultExecutionPlan.java:609)
... 10 more
I think the last error seems to be lack of report destination source (at com.github.spotbugs.snom.internal.SpotBugsHtmlReport_Decorated.getDestination(Unknown Source
).
Thanks for updating information!
This is known issue, it seems that Android Gradle plugin deleted AndroidJavaCompile
task 🤔
Their release note has no description about it, so I'm still not sure how we should fix this issue. Do you have any idea about why they removed the task? 😭
One workaround, is that, apply the base plugin and create SpotBugsTask
by your own. Then it won't touch AndroidJavaCompile
class so it should work.
Oh, I didn't know that was a known issue and I'm not sure why they removed AndroidJavaCompile
task.. I also tried to find the relevant issue from Google's IssueTracker but, I couldn't find anything about why they removed the task except this.
I solved the problem above by creating my own task. Thank you again! 😄 I'm not very professional about Android Gradle plugin but, there must be a way to solve this issue to be native support for Android..
One workaround, is that, apply the base plugin and create SpotBugsTask by your own. Then it won't touch AndroidJavaCompile class so it should work.
@KengoTODA do you have example of how to "create SpotBugsTask"? We're running into this issue but not quite sure how to apply the workaround! Excuse the lack of gradle skillz.
@KengoTODA : FYI, AndroidJavaCompile has been totally removed. You can pin the spotbugsTask against the JavaCompile task instead. Verified it w/ the Android tools folks.
I can do a PR but I don't see any dev readme on how to test/validate this plugin...
I already have a PR up for it: https://github.com/spotbugs/spotbugs-gradle-plugin/pull/252
Nice...what's the hold up on getting the PR merged and released @KengoTODA ? Looks pretty straightforward...
Would really love to see this available. Could you share eta on release?
I can confirm that adding:
tasks.withType(com.github.spotbugs.snom.SpotBugsTask) {
dependsOn 'assembleDebug'.
classes = files("${project.buildDir}/intermediates/javac/variant")
}
makes following error disappear:
> Task :lib:compileJava FAILED
XXXX.java:5: error: package android.util does not exist
import android.util.Log;
^
XXXX.java:22: error: cannot find symbol
Log.e("tag", "message");
^
symbol: variable Log
location: class AGenesis
2 errors
But instead, I have:
> Task :lib:spotbugsMain
Scanning archives (8 / 8)
2 analysis passes to performG [5s]
Pass 1: Analyzing classes (19 / 19) - 100% complete
Pass 2: Analyzing classes (6 / 6) - 100% complete
Done with analysis
The following classes needed for analysis were missing:
android.util.Log
The following classes needed for analysis were missing:
android.util.Log
And to fix last error:
tasks.withType(com.github.spotbugs.snom.SpotBugsTask) { taski ->
doFirst {
taski.setAuxClassPaths(project.files(taski.getAuxClassPaths().getFiles(), project.android.getBootClasspath()))
}
dependsOn 'assembleDebug'.
classes = files("${project.buildDir}/intermediates/javac/variant")
}
This makes pass spotbugs for my Android project.
Hey all,
I've recently tried to get Spotbugs working in a sample Android application and I haven't had any luck.
Here's a sample project showing my attempt: https://github.com/ZOlbrys/SpotbugsExample
When I try to run Spotbugs via gradle, I see this error:
Here's my build.gradle app file:
I am running into these bugs on Android Studio 3.2.1 and Android Studio 3.3 RC2. Am I doing something wrong here? Thanks!