Con*_*ems 9 android dependency-management kotlin build.gradle gradle-kotlin-dsl
我正在尝试切换到使用 Kotlin DSL 从对象 Kotlin 文件而不是 gradle 文件获取依赖项版本。当我进行 gradle 同步时,它无法解析引用,但我可以从 build.gradle.kts 单击文件(库)。我没有对 build.gradle 或 settings.gradle 进行任何其他更改。这个问题并不是杰克逊特有的,我在多个项目中尝试过这个问题,并在发布问题之前阅读文档并搜索答案。
我得到一个 build.gradle.kts:15:20: Unresolved reference: Libraries
这是我的项目的结构
build.gradle
settings.gradle
+buildSrc
build.gradle.kts
+src
+main
+kotlin
Libraries.kt
Run Code Online (Sandbox Code Playgroud)
这是我的 build.gradle.kts 文件
import org.gradle.kotlin.dsl.`kotlin-dsl`
plugins {
`kotlin-dsl`
java
`java-gradle-plugin`
}
repositories {
mavenCentral()
}
dependencies {
implementation(Libraries.Jackson.core)
// implementation(Libraries.anotherJackson)
}
Run Code Online (Sandbox Code Playgroud)
这是 kotlin Libraries.kt 文件
object Libraries {
val Jackson = JacksonLibraries
const val anotherJackson = "com.fasterxml.jackson.core:jackson-core:2.11.1"
}
object JacksonLibraries {
const val core = "com.fasterxml.jackson.core:jackson-core:${Versions.Jackson.core}"
}
object Versions {
object Jackson {
const val core = "2.11.1"
const val annotations = "2.11.1"
const val databind = "2.11.1"
}
}
Run Code Online (Sandbox Code Playgroud)
如果我在没有库文件的情况下尝试它,它工作得很好。
implementation("com.fasterxml.jackson.core:jackson-core:2.11.1")
Run Code Online (Sandbox Code Playgroud)
但这两个都不起作用
implementation(Libraries.Jackson.core)
implementation(Libraries.anotherJackson)
Run Code Online (Sandbox Code Playgroud)
提前致谢!
您是否正在尝试./buildSrc/src/main/kotlin/Libraries.kt访问./buildSrc/build.gradle.kts?因为那是不可能的,也没有必要。
基本上,不能使用./buildSrc/src/main/kotlin/Libraries.ktin 的./buildSrc/build.gradle.kts原因与不能使用<root>/src/main/kotlin/Libraries.ktin的原因相同./<root>/build.gradle.kts。Gradle 构建脚本无法使用它们尝试构建的项目的输出。
但是buildSrc 被视为包含构建,因此 的内容./buildSrc/src/main/...将在<root>/build.gradle.kts
可以在版本目录之间共享./buildSrc/build.gradle.kts版本<root>/build.gradle.kts。
该libs.versions.toml文件是执行此操作的最简单方法。
简而言之,
<root>/gradle/libs.versions.toml文件[versions]
groovy = "3.0.5"
[libraries]
groovy-core = { module = "org.codehaus.groovy:groovy", version.ref = "groovy" }
Run Code Online (Sandbox Code Playgroud)
<root>/build.gradle.kts或任何<root>/settings.gradle.kts include(...)-ed 子项目中,您现在可以访问依赖项(您可能需要刷新 IntelliJ 几次才能自动完成加载)。
[versions]
groovy = "3.0.5"
[libraries]
groovy-core = { module = "org.codehaus.groovy:groovy", version.ref = "groovy" }
Run Code Online (Sandbox Code Playgroud)
您可以通过加载文件在任何项目中使用相同的版本目录。如果您想托管并下载它,那也可以!
如果您想跨多个单独的项目对齐版本,可以按照此处的文档进行操作:https ://docs.gradle.org/current/userguide/platforms.html
版本平台比版本目录更加结构化。它们有点像 Gradle 版本的 Maven BOM,当然它们更灵活!
简而言之,
dependencies {
implementation(libs.groovy.core)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9999 次 |
| 最近记录: |