TL;DR:在 Kotlin Notebook 中使用时,IntelliJ 项目可访问的 mavenLocal 依赖项无法正确解析。为什么?
我有一个本地 Kotlin 依赖项
com.rough4:rough4:0.0
,出于说明目的,它在全局范围内公开了 println 重复项 myPrintln(msg:String)
。构建依赖项并将其发布到 mavenLocal
存储库(位于 /home/user/.m2/repository
,jar 位于 /home/user/.m2/repository/com/rough4/rough4/0.0/rough4-0.0.jar
)。
//rough4/build.gradle.kts
plugins {
kotlin("jvm") version "2.0.0"
`maven-publish`
}
group = "com.rough4"
version = "0.0"
repositories {
mavenCentral()
mavenLocal()
}
kotlin {
jvmToolchain(21)
}
java{
withSourcesJar()
withJavadocJar()
}
publishing{
publications {
create<MavenPublication>("Testing"){
from(components["java"])
}
}
}
//rough4/src/main/kotlin/localFuncs.kt
fun myPrintln(msg:String){
println(msg)
}
当通过
jvmToolchain
在规范的 IntelliJ 项目(具有匹配的 dependencies { implementation("com.rough4:rough4:0.0") }
版本和 gradle 版本 8.5)中使用时,rough4
依赖项会解析,我可以使用 myPrintln
。这表明发布过程正常运行。
时无法解决
//annotation based syntax
@file:Repository("*mavenLocal")
@file:DependsOn("com.rough4:rough4:0.0")
import myPrintln
//Line_3.jupyter.kts (4:8 - 17) Unresolved reference: myPrintln
我尝试过使用
@file:Repository("/home/user/.m2/repository")
和 file://
以及 类似 gradle 的语法 - 没有任何效果。
//gradle based syntax
USE{
repositories {
mavenCentral()
mavenLocal()
}
dependencies { implementation("com.rough4:rough4:0.0") }
}
发生什么事了?
奇怪的是,将依赖项添加到封装项目的 build.gradle.kts(创建并打开 Kotlin Notebook 的 IntelliJ 项目,而不是说通过 jupyter CLI 在外部独立打开),使其在Kotlin Notebook,其中
myPrintln
即可访问。
最有可能的问题是您请求的符号位于根包内。并且有相应的bug。 https://youtrack.jetbrains.com/issue/KTNB-709/Symbols-from-the-root-package-inside-the-libraries-are-not-resolved-on-the-kernel-side
解决方法:将符号移至非根包