Findbugs with Gradle plugin doesn't work in Java 9

Viewed 3248

I am migrating my project (multi project in Gradle) from Java 8 to Java 9 (without using modules so far). I use Gradle 4.3 and Findbugs Gradle plugin - I have apply plugin: 'findbugs' in my gradle.build file. In dependencies I have

compile group: 'com.google.code.findbugs', name: 'jsr305', version: '3.0.2'
compile group: 'com.google.code.findbugs', name: 'annotations', version: '3.0.1'

Previously, with java 8 (open-jdk) everything worked normally, but when I used java 9 (oracle - build 9.0.1+11), I got the following exception after executing gradle check (com.example.custom.MyClass is a class from my codebase): The following errors occurred during analysis:

Error scanning com/example/custom/MyClass for referenced classes
java.lang.IllegalArgumentException
  At org.objectweb.asm.ClassReader.<init>(ClassReader.java:170)
  At org.objectweb.asm.ClassReader.<init>(ClassReader.java:153)
  At edu.umd.cs.findbugs.asm.FBClassReader.<init>(FBClassReader.java:35)
  At edu.umd.cs.findbugs.classfile.engine.asm.ClassReaderAnalysisEngine.analyze(ClassReaderAnalysisEngine.java:48)
  At edu.umd.cs.findbugs.classfile.engine.asm.ClassReaderAnalysisEngine.analyze(ClassReaderAnalysisEngine.java:34)
  At edu.umd.cs.findbugs.classfile.impl.AnalysisCache.getClassAnalysis(AnalysisCache.java:262)
  At edu.umd.cs.findbugs.classfile.engine.ClassInfoAnalysisEngine.analyze(ClassInfoAnalysisEngine.java:75)
  At edu.umd.cs.findbugs.classfile.engine.ClassInfoAnalysisEngine.analyze(ClassInfoAnalysisEngine.java:38)
  At edu.umd.cs.findbugs.classfile.impl.AnalysisCache.getClassAnalysis(AnalysisCache.java:262)
  At edu.umd.cs.findbugs.FindBugs2.buildReferencedClassSet(FindBugs2.java:774)
  At edu.umd.cs.findbugs.FindBugs2.execute(FindBugs2.java:222)
  At org.gradle.api.plugins.quality.internal.findbugs.FindBugsExecuter.runFindbugs(FindBugsExecuter.java:39)
  At java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  At java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  At java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  At java.base/java.lang.reflect.Method.invoke(Method.java:564)
  At org.gradle.process.internal.worker.request.WorkerAction.run(WorkerAction.java:100)
  At org.gradle.process.internal.worker.request.WorkerAction.runThenStop(WorkerAction.java:83)
  At java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  At java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  At java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  At java.base/java.lang.reflect.Method.invoke(Method.java:564)
  At org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
  At org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
  At org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:146)
  At org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:128)
  At org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
  At org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
  At org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
  At java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
  At java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
  At org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
  At java.base/java.lang.Thread.run(Thread.java:844)

This appears for every class from my gradle project (and also for every class which Hibernate JPA 2 Metamodel generator generated). I guess this will be related to jigsaw modules. However I don't declare any module-info.java, so I guess an automatic module is created for the whole codebase and everything is accessible from anywhere.

1 Answers

Though findbugs Java9 support doesn't look moving ahead even gradually. And there are more posts about it which eventually suggests using spotbugs instead.

compile 'com.github.spotbugs:spotbugs:3.1.0'

You shall find this migration guide useful for the same.


You might though just want to give a try to override the ASM version to 6.0 in your project's build using:

compile 'org.ow2.asm:asm:6.0'

Related