我使用一个分级平台 (特别是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发布于 2021-12-18 09:38:18
annotationProcessor配置表示与应用程序类路径不同的依赖关系图。它是完全独立的,因为它是“编译器插件”的依赖项。因此,声明为implementation ...的依赖项将不会在annotationProcessor路径上找到,而且它们也不能。这里的platform依赖没有什么不同,所以并不是因为您在implementation上声明了一个平台依赖项,它就会神奇地出现在annotationProcessor路径上:没有理由这样做。
长话短说:您也需要将您的平台声明为annotationProcessor的依赖项。请注意,绝对而言,您没有理由对编译器类路径( annotationProcessor路径)和应用程序类路径使用相同的依赖版本:例如,您使用的注释处理器可能依赖于与应用程序不同的番石榴版本,因此将平台分开是一个好主意。
发布于 2021-12-17 19:10:12
我必须为我想要使用它的每个配置指定一个分级平台,所以
annotationProcessor(platform(project(':platform')))这个分级问题提供了一个线索: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')
}https://stackoverflow.com/questions/70397868
复制相似问题