我正在使用 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/