我正在使用Gradle 平臺(特別是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
uj5u.com熱心網友回復:
該annotationProcessor配置表示與您的應用程式類路徑不同的依賴關系圖。它是完全獨立的,因為它的依賴項是“編譯器插件”。因此,宣告為依賴關系implementation ...將不會在上找到annotationProcessor路徑,并且它們不能。你的platform依賴在這里沒有什么不同,所以這不是因為你宣告了一個平臺依賴implementation,它會神奇地出現在annotationProcessor路徑上:沒有理由這樣做。
長話短說:您需要將您的平臺宣告為也是的依賴項annotationProcessor。請注意,絕對沒有理由為編譯器類路徑(annotationProcessor路徑)和應用程式類路徑使用相同的依賴版本:例如,您使用的注釋處理器可能依賴于與您的應用程式不同的 Guava 版本,所以它是將平臺分開是個好主意。
uj5u.com熱心網友回復:
我必須為我想使用它的每個配置指定一個 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')
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/386755.html
標籤:等级
