经过进一步调查,我发现了问题 https://youtrack.jetbrains.com/issue/KT-66523/jvmMain-resources-classpath-is-not-added-when-using-the-multiplatform-project-as-a-module
添加消耗时未添加资源classpath
implementation(project(":sevenzipJavm"))
但是添加 jar 后我就可以访问资源了。
因此,除非 JetBrains 解决了该问题,否则当前最好的解决方法是将项目作为 jar 而不是类来使用。 但我发现的是静态 jar 链接
implementation(files("../sevenzipJavm/build/libs/sevenzipJavm.jar"))
问题是它不是从项目构建的,而是需要构建的 jar。这会导致:
因此,我也更新了问题标题。 再次,我不会向我展示如何添加为类,而是添加为 jar,但不是静态添加。
好像无法访问src\jvmMain的资源 多平台项目的 jvmMain 中的 esources .txt。
gradle kts:
plugins {
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.android.library)
// id("module.publication")
}
kotlin {
applyDefaultHierarchyTemplate()
jvm()
androidTarget {
publishLibraryVariants("release")
compilations.all {
kotlinOptions {
jvmTarget = "1.8"
}
}
}
// iosX64()
// iosArm64()
// iosSimulatorArm64()
// linuxX64()
sourceSets {
commonMain.dependencies {
}
commonTest.dependencies {
implementation(libs.kotlin.test)
}
androidMain.dependencies {
}
jvmMain {
dependencies {
}
}
}
}
android {
namespace = "org.jetbrains.kotlinx.multiplatform.library.sevenZip"
compileSdk = libs.versions.android.compileSdk.get().toInt()
defaultConfig {
minSdk = libs.versions.android.minSdk.get().toInt()
}
}
样品:
val message =
Thread.currentThread().contextClassLoader.getResource("a.txt")?.readText()
println(message)
谁能告诉我这里出了什么问题吗?以及如何修复它。 如果不在多平台内,此代码适用于纯 JVM 项目。
而不是这个
Thread.currentThread().contextClassLoader.getResource("a.txt")?.readText()
这样做,
this.javaClass.classLoader.getResource("a.txt")?.readText()
我刚刚测试过,它有效。