代码之家  ›  专栏  ›  技术社区  ›  fxmasa

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

  •  5
  • fxmasa  · 技术社区  · 6 年前

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

    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)
    

    我想这将与拼图模块有关。但是我没有申报任何 module-info.java ,所以我想一个自动模块是为整个代码库创建的,所有东西都可以从任何地方访问。

    1 回复  |  直到 6 年前
        1
  •  5
  •   Naman    6 年前

    尽管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'