代码之家  ›  专栏  ›  技术社区  ›  Zachary Sweigart

容易出错并消除非法访问异常

  •  1
  • Zachary Sweigart  · 技术社区  · 6 年前

    我正在将null-away和容易出错的应用程序合并到我的应用程序中,并在我的顶层构建中添加了以下内容。格拉德尔

    buildscript {
        repositories {
            google()
            maven { url 'https://plugins.gradle.org/m2/' }
            ...
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:3.1.2'
            classpath "net.ltgt.gradle:gradle-errorprone-plugin:0.0.16"
        }
    }
    
    subprojects {
        apply from: rootProject.file("gradle/nullaway.gradle")
    }
    ...
    

    然后在 nullaway.gradle 我有档案

    buildscript {
        repositories {
            maven {
                url "https://plugins.gradle.org/m2/"
            }
        }
    }
    
    apply plugin: 'net.ltgt.errorprone'
    
    if (this.name == 'javalib1' || this.name == 'javalib2') {
        apply plugin: 'java-library'
    
        dependencies {
            annotationProcessor deps.thirdparty.nullaway
    
            errorprone deps.thirdparty.error_prone
        }
    } else {
        if (this.name == 'app') {
            apply plugin: 'com.android.application'
        } else {
            apply plugin: 'com.android.library'
        }
    
        dependencies {
            annotationProcessor deps.thirdparty.nullaway
    
            errorprone deps.thirdparty.error_prone
        }
    }
    
    tasks.withType(JavaCompile) {
        if (!name.toLowerCase().contains("test")) {
            options.compilerArgs += [
                    "-Xep:NullAway:WARN",
                    "-XepOpt:NullAway:AnnotatedPackages=com.mypackage",
                    "-Xep:RestrictTo:WARN",
                    "-XepExcludedPaths:.*/build/generated/.*"]
        }
    }
    

    使用这种设置,每当我尝试构建我的应用程序时,我都会遇到一个异常

    Caused by: java.lang.IllegalAccessError: tried to access class com.google.common.graph.BaseGraph from class com.google.common.graph.Traverser
        at com.google.common.graph.Traverser.forTree(Traverser.java:134)
        at dagger.internal.codegen.ValidationReport.<clinit>(ValidationReport.java:63)
        at dagger.internal.codegen.InjectValidator.validateMembersInjectionType(InjectValidator.java:257)
        at dagger.internal.codegen.InjectBindingRegistryImpl.tryRegisterMembersInjectedType(InjectBindingRegistryImpl.java:269)
        at dagger.internal.codegen.InjectBindingRegistryImpl.tryRegisterMembersInjectedType(InjectBindingRegistryImpl.java:253)
        at dagger.internal.codegen.InjectProcessingStep$1.visitVariableAsField(InjectProcessingStep.java:67)
        at dagger.internal.codegen.InjectProcessingStep$1.visitVariableAsField(InjectProcessingStep.java:57)
        at com.sun.tools.javac.code.Symbol$VarSymbol.accept(Symbol.java:1550)
        at dagger.internal.codegen.InjectProcessingStep.process(InjectProcessingStep.java:56)
        at dagger.shaded.auto.common.BasicAnnotationProcessor.process(BasicAnnotationProcessor.java:330)
        at dagger.shaded.auto.common.BasicAnnotationProcessor.process(BasicAnnotationProcessor.java:181)
    

    我检查了笔记,我使用的是dagger版本2.16,正如你所见,我有排除的功能 build/generated 文件夹。我错过了什么?

    0 回复  |  直到 6 年前