为什么我的 annotationProcessor 配置看不到我的 Gradle 平台中的版本?
Why doesn't my annotationProcessor configuration see the version in my Gradle Platform?
我正在使用 Gradle Platform (specifically 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
我必须为每个要使用它的配置指定一个 Gradle 平台,所以
annotationProcessor(platform(project(':platform')))
这个gradle问题提供了线索:https://github.com/gradle/gradle/issues/8723
这些模块定义有效:
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 {
annotationProcessor(platform(project(':platform')))
annotationProcessor('foo:bar')
}
annotationProcessor
配置表示与您的应用程序类路径不同的依赖关系图。它是完全独立的,因为它是“编译器插件”的依赖项。因此,声明为 implementation ...
的依赖项将 不会 在 annotationProcessor
路径上找到,而且它们不能。这里的 platform
依赖项没有什么不同,所以并不是因为您声明了对 implementation
的平台依赖项它会神奇地出现在 annotationProcessor
路径上:没有理由这样做。
长话短说:您也需要将您的平台声明为 annotationProcessor
的依赖项。请注意,绝对没有理由为 编译器类路径 (annotationProcessor
路径)和 应用程序类路径使用相同的依赖版本:例如,您使用的注释处理器可能依赖于与您的应用程序不同的 Guava 版本,因此最好将平台分开。
我正在使用 Gradle Platform (specifically 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
我必须为每个要使用它的配置指定一个 Gradle 平台,所以
annotationProcessor(platform(project(':platform')))
这个gradle问题提供了线索:https://github.com/gradle/gradle/issues/8723
这些模块定义有效:
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 {
annotationProcessor(platform(project(':platform')))
annotationProcessor('foo:bar')
}
annotationProcessor
配置表示与您的应用程序类路径不同的依赖关系图。它是完全独立的,因为它是“编译器插件”的依赖项。因此,声明为 implementation ...
的依赖项将 不会 在 annotationProcessor
路径上找到,而且它们不能。这里的 platform
依赖项没有什么不同,所以并不是因为您声明了对 implementation
的平台依赖项它会神奇地出现在 annotationProcessor
路径上:没有理由这样做。
长话短说:您也需要将您的平台声明为 annotationProcessor
的依赖项。请注意,绝对没有理由为 编译器类路径 (annotationProcessor
路径)和 应用程序类路径使用相同的依赖版本:例如,您使用的注释处理器可能依赖于与您的应用程序不同的 Guava 版本,因此最好将平台分开。