2017-11-04 21 views
4

내 프로젝트 (다중 프로젝트는 Gradle)를 Java 8에서 Java 9 (지금까지 모듈 사용하지 않음)로 마이그레이션 중입니다. 나는 Gradle 4.3과 Findbugs Gradle Plugin을 사용한다 - 나는 내 gradle.build 파일에 apply plugin: 'findbugs'을 가지고있다. java 8이 (open-jdk) 모든 것이 정상적으로 작동과 종속에서 나는, 이전Gradle 플러그인이있는 Findbugs가 Java에서 작동하지 않습니다.

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 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을 프로젝트에서 모든 클래스에 대해 표시 (및 최대 절전 모드 JPA 2 메타 모델 생성기가 생성 된 모든 클래스). 이것이 직소 모듈과 관련이있는 것 같습니다. 그러나 나는 어떤 module-info.java도 선언하지 않으므로 자동 모듈이 전체 코드베이스 용으로 만들어졌으며 어디서나 모든 것이 액세스 가능하다고 생각합니다.

+0

"이이 퍼즐과 관련이있을 것 같아요 모듈 "과 관련이 없습니다. 스택 추적에서 Findbugs는 ASM을 사용하고 ASM은 IllegalArgumentException을 던지고있는 것 같습니다. 아마도 ASM이 v53.0 클래스 파일을 인식하지 못하기 때문입니다. github의 Findbugs 프로젝트에 대한 공지는 Spotbugs에 문제를보고하도록 요청합니다. –

답변

5

findbugs Java9 support은 앞으로 점차적으로 이동하지 않습니다. 그리고 spotbugs 대신에 posts이 더 있습니다.

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

동일한이 migration guide 유용하게된다.


당신은 수도 만 사용하여 프로젝트의 빌드에서 6.0로 ASM 버전을 오버라이드 (override)하는 시도를주고 싶어하지만 :

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

+2

Findbugs는'asm-commons'와'asm-debug-all'에 의존합니다. org.ow2.asm : asm-commons : 6.0''을 추가하고 org.ow2.asm : asm-debug-all : 6.0_BETA'' 을 컴파일하고 종속성을 확인한 후에도 여전히 '\ --- com.google.code.findbugs : findbugs : 3.0.1 + --- org.ow2.asm : asm-debug-all : 5.0.2 + --- org.ow2.asm : asm-commons : 5.0.2 | \ --- org.ow2.asm : asm-tree : 5.0.2 | \ --- org.ow2.asm : asm : 5.0.2' 여전히 작동하지 않습니다. 아마도 더 나은 해결책은 당신이 제안한 것처럼 'spotbugs'로 마이그레이션하는 것입니다. 고맙습니다! – fxmasa

+2

@fxmasa 나중에 내가 주로 추측할만한 방법이 될 것입니다. 또는 그 github 문제에 대한 의견 중 하나로서 자바 9 관련 지사를 끌어와 그것을 사용하도록 물건을 스스로 업데이 트하는 것입니다. – nullpointer