gradle - 为什么我的annotationProcessor 配置在我的Gradle 平台中看不到版本?

标签 gradle

我正在使用 Gradle Platform (特别是 java-platform )来控制我的传递依赖项。我有以下模块:

platform/build.gradle

plugins {
    id 'java-platform'
}
dependencies {
    constraints {
        api('foo:bar:123')
    }
}

app/build.gradle:

plugins {
    id 'com.android.application'
}

android {
    buildToolsVersion rootProject.buildToolsVersion
    compileSdkVersion rootProject.compileSdkVersion

    defaultConfig {
        maxSdkVersion rootProject.maxSdkVersion
        minSdkVersion rootProject.minSdkVersion
        targetSdkVersion rootProject.targetSdkVersion
        versionCode 1
        versionName '1.0'
    }
    
    compileOptions {
        sourceCompatibility rootProject.sourceCompatibility
        targetCompatibility rootProject.targetCompatibility
    }
}

dependencies {
    api(platform(project(':platform')))

    annotationProcessor('foo:bar')
}

但是当我运行 ./gradlew :app:dependencies 时,gradle 无法找到我的 annotationProcessor 版本:

debugAnnotationProcessorClasspath - Resolved configuration for annotation-processor for variant: debug
\--- foo:bar FAILED

如果我明确指定版本,那么一切正常:

app/build.gradle:

plugins {
    id 'com.android.application'
}

android {
    buildToolsVersion rootProject.buildToolsVersion
    compileSdkVersion rootProject.compileSdkVersion

    defaultConfig {
        maxSdkVersion rootProject.maxSdkVersion
        minSdkVersion rootProject.minSdkVersion
        targetSdkVersion rootProject.targetSdkVersion
        versionCode 1
        versionName '1.0'
    }
    
    compileOptions {
        sourceCompatibility rootProject.sourceCompatibility
        targetCompatibility rootProject.targetCompatibility
    }
}

dependencies {    
    annotationProcessor('foo:bar:123')
}

然后我在 ./gradlew :app:dependencies 中看到版本:

debugAnnotationProcessorClasspath - Resolved configuration for annotation-processor for variant: debug
\--- foo:bar:123

最佳答案

annotationProcessor 配置表示与应用程序类路径不同的依赖关系图。它是完全独立的,因为它的依赖项是“编译器插件”。因此,声明为 implementation ... 的依赖项将不会annotationProcessor 路径上找到,而且也一定不会。这里的 platform 依赖项没有什么不同,因此并不是因为您声明了对 implementation 的平台依赖项,它就会神奇地出现在 annotationProcessor 路径上:没有理由这样做。

长话短说:您还需要将您的平台声明为 annotationProcessor 的依赖项。请注意,绝对没有理由为您的编译器类路径(annotationProcessor 路径)和应用程序类路径使用相同的依赖项版本>:例如,您使用的注释处理器可能依赖于与您的应用程序不同的 Guava 版本,因此最好将平台分开。

关于gradle - 为什么我的annotationProcessor 配置在我的Gradle 平台中看不到版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70397868/

相关文章:

java - 没有 Maven 存储库的通用库

gradle - 如何设置Gradle环境变量?

android - 无法解析 com.commonsware.cwac :camera:0. 6.+

Gradle JAXB WSDL 任务失败,出现 java.lang.NoClassDefFoundError : javax/xml/bind/JAXBContext

path - Gradle Artifact依赖性-Artifactory Artifactory -如何找到路径

android-studio - Android中的Tensorflow,gradle问题

maven - 在哪里放置.jar进行gradle构建

java - gradle可以自动创建META-INF、WEB-INF文件夹和web.xml吗?

java - Grails 3.x 失败 bootRun

file-io - 使用Gradle的文件IO