首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的annotationProcessor配置看不到Gradle平台中的版本?

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

Stack Overflow用户
提问于 2021-12-17 19:10:12
回答 2查看 212关注 0票数 1

我使用一个分级平台 (特别是java-platform)来控制我的传递依赖项。我有以下模块:

platform/build.gradle

代码语言:javascript
复制
plugins {
    id 'java-platform'
}
dependencies {
    constraints {
        api('foo:bar:123')
    }
}

app/build.gradle

代码语言:javascript
复制
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版本:

代码语言:javascript
复制
debugAnnotationProcessorClasspath - Resolved configuration for annotation-processor for variant: debug
\--- foo:bar FAILED

如果我显式地指定了版本,那么所有内容都能正常工作:

app/build.gradle

代码语言:javascript
复制
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中看到了这个版本

代码语言:javascript
复制
debugAnnotationProcessorClasspath - Resolved configuration for annotation-processor for variant: debug
\--- foo:bar:123
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-18 09:38:18

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

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

票数 1
EN

Stack Overflow用户

发布于 2021-12-17 19:10:12

我必须为我想要使用它的每个配置指定一个分级平台,所以

代码语言:javascript
复制
annotationProcessor(platform(project(':platform')))

这个分级问题提供了一个线索:https://github.com/gradle/gradle/issues/8723

这些模块定义起作用了:

platform/build.gradle

代码语言:javascript
复制
plugins {
    id 'java-platform'
}
dependencies {
    constraints {
        api('foo:bar:123')
    }
}

app/build.gradle

代码语言:javascript
复制
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(platform(project(':platform')))

    annotationProcessor('foo:bar')
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70397868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档