未解决的参考:库 - buildSrc
Unresolved reference: Libraries - buildSrc
我正在尝试切换到使用 Kotlin DSL 从对象 Kotlin 文件而不是 gradle 文件获取依赖项版本。当我执行 gradle 同步时,它无法解析引用,但我可以从 build.gradle.kts 单击文件(库)。我没有对 build.gradle 或 settings.gradle 进行任何其他更改。这个问题不是 Jackson 特有的,我在多个项目中尝试过这个问题,并在发布问题之前阅读了文档并搜索了答案。
我得到一个 build.gradle.kts:15:20: 未解决的参考:图书馆
这是我项目的结构
build.gradle
settings.gradle
+buildSrc
build.gradle.kts
+src
+main
+kotlin
Libraries.kt
这是我的 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)
}
这是 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"
}
}
如果我在没有库文件的情况下尝试它,它工作正常。
implementation("com.fasterxml.jackson.core:jackson-core:2.11.1")
但这两个都不行
implementation(Libraries.Jackson.core)
implementation(Libraries.anotherJackson)
提前致谢!
您是否正在尝试访问 ./buildSrc/build.gradle.kts
中的 ./buildSrc/src/main/kotlin/Libraries.kt
?因为那是不可能的,也没有必要。
基本上不能在 ./buildSrc/build.gradle.kts
中使用 ./buildSrc/src/main/kotlin/Libraries.kt
,原因与不能在 ./<root>/build.gradle.kts
中使用 <root>/src/main/kotlin/Libraries.kt
的原因相同。 Gradle 构建脚本无法使用他们正在尝试构建的项目的输出。
但是 buildSrc
is treated as included build,所以 ./buildSrc/src/main/...
的内容将在 <root>/build.gradle.kts
中可用
版本对齐
版本目录
可以使用版本目录在 ./buildSrc/build.gradle.kts
和 <root>/build.gradle.kts
之间共享版本。
libs.versions.toml
file 是最简单的方法。
简而言之,
- 使用Gradle7.4+
- 创建
<root>/gradle/libs.versions.toml
文件
- 定义您的依赖项,例如
[versions]
groovy = "3.0.5"
[libraries]
groovy-core = { module = "org.codehaus.groovy:groovy", version.ref = "groovy" }
- 在
<root>/build.gradle.kts
或任何 <root>/settings.gradle.kts
include(...)
-ed 子项目中,您现在可以访问依赖项(您可能需要为 auto-complete 加载)。
dependencies {
implementation(libs.groovy.core)
}
您可以在任何项目中使用相同的版本目录 loading the file。如果你想托管它并下载它,那也行!
版本平台
如果你想在几个独立的项目中对齐版本,你可以按照这里的文档:https://docs.gradle.org/current/userguide/platforms.html
版本平台比版本目录更加结构化。它们有点像 Gradle 的 Maven BOM 版本,当然它们更灵活!
简而言之,
- 创建一个Gradle项目,并应用Java Platform Plugin and Maven Publish Plugin
- 定义约束条件
- 将其发布到 Maven 存储库
- 将其作为平台依赖项应用于任何项目
dependencies {
implementation(platform("my.company:our-own-version-platform:1.2.3"))
// no need for a version, if our-own-version-platform provides it!
implementation("org.codehaus.groovy:groovy")
}
我正在尝试切换到使用 Kotlin DSL 从对象 Kotlin 文件而不是 gradle 文件获取依赖项版本。当我执行 gradle 同步时,它无法解析引用,但我可以从 build.gradle.kts 单击文件(库)。我没有对 build.gradle 或 settings.gradle 进行任何其他更改。这个问题不是 Jackson 特有的,我在多个项目中尝试过这个问题,并在发布问题之前阅读了文档并搜索了答案。
我得到一个 build.gradle.kts:15:20: 未解决的参考:图书馆
这是我项目的结构
build.gradle
settings.gradle
+buildSrc
build.gradle.kts
+src
+main
+kotlin
Libraries.kt
这是我的 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)
}
这是 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"
}
}
如果我在没有库文件的情况下尝试它,它工作正常。
implementation("com.fasterxml.jackson.core:jackson-core:2.11.1")
但这两个都不行
implementation(Libraries.Jackson.core)
implementation(Libraries.anotherJackson)
提前致谢!
您是否正在尝试访问 ./buildSrc/build.gradle.kts
中的 ./buildSrc/src/main/kotlin/Libraries.kt
?因为那是不可能的,也没有必要。
基本上不能在 ./buildSrc/build.gradle.kts
中使用 ./buildSrc/src/main/kotlin/Libraries.kt
,原因与不能在 ./<root>/build.gradle.kts
中使用 <root>/src/main/kotlin/Libraries.kt
的原因相同。 Gradle 构建脚本无法使用他们正在尝试构建的项目的输出。
但是 buildSrc
is treated as included build,所以 ./buildSrc/src/main/...
的内容将在 <root>/build.gradle.kts
版本对齐
版本目录
可以使用版本目录在 ./buildSrc/build.gradle.kts
和 <root>/build.gradle.kts
之间共享版本。
libs.versions.toml
file 是最简单的方法。
简而言之,
- 使用Gradle7.4+
- 创建
<root>/gradle/libs.versions.toml
文件 - 定义您的依赖项,例如
[versions] groovy = "3.0.5" [libraries] groovy-core = { module = "org.codehaus.groovy:groovy", version.ref = "groovy" }
- 在
<root>/build.gradle.kts
或任何<root>/settings.gradle.kts
include(...)
-ed 子项目中,您现在可以访问依赖项(您可能需要为 auto-complete 加载)。dependencies { implementation(libs.groovy.core) }
您可以在任何项目中使用相同的版本目录 loading the file。如果你想托管它并下载它,那也行!
版本平台
如果你想在几个独立的项目中对齐版本,你可以按照这里的文档:https://docs.gradle.org/current/userguide/platforms.html
版本平台比版本目录更加结构化。它们有点像 Gradle 的 Maven BOM 版本,当然它们更灵活!
简而言之,
- 创建一个Gradle项目,并应用Java Platform Plugin and Maven Publish Plugin
- 定义约束条件
- 将其发布到 Maven 存储库
- 将其作为平台依赖项应用于任何项目
dependencies { implementation(platform("my.company:our-own-version-platform:1.2.3")) // no need for a version, if our-own-version-platform provides it! implementation("org.codehaus.groovy:groovy") }