java - 带有 Gradle 插件的 Findbugs 在 Java 9 中不起作用

标签 java findbugs java-9

我正在将我的项目(Gradle 中的多项目)从 Java 8 迁移到 Java 9(目前还没有使用模块)。我使用 Gradle 4.3 和 Findbugs Gradle 插件 - 我的 gradle.build 文件中有 apply plugin: 'findbugs'。在依赖项中我有

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

以前,使用 java 8 (open-jdk) 一切正常,但是当我使用 java 9 (oracle - build 9.0.1+11),我在执行gradle check 后得到以下异常(com.example.custom.MyClass 是我的代码库中的一个类) : 分析时出现以下错误:

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)

这出现在我的 gradle 项目中的每个类(以及 Hibernate JPA 2 元模型生成器生成的每个类)。 我想这将与拼图模块有关。但是我没有声明任何 module-info.java,所以我猜想为整个代码库创建了一个自动模块,并且可以从任何地方访问所有内容。

最佳答案

虽然 findbugs Java9 support看起来甚至不会逐渐前进。还有更多posts关于它最终建议使用 spotbugs相反。

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

你会找到这个 migration guide同样有用。


您可能只是想尝试在您的项目构建中使用以下方法将 ASM 版本覆盖为 6.0:

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

<罢工>

关于java - 带有 Gradle 插件的 Findbugs 在 Java 9 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47109762/

相关文章:

Jenkins 忽略趋势图配置

java - 强制 IntelliJ 在 NonNull 违规时编译失败

maven - 在 Maven 构建中使用依赖项命令行参数

java 9 模块,NoClassDefFoundError : java. sql.Date

Java:类的终结器?

java - 根据特定条件在 Oracle SQL 数据库中添加值

java - 从 java 为给定文件夹 x 级别创建 jstree 数据

java : "Missing return statement"

Java 9 在 maven 中编译良好,但在 intellij 中编译不佳

java - Java 9 中的 --add-exports 和 --add-opens 有什么区别?