相对路径在 IntelliJ IDEA 中不起作用

Relative paths do not work in IntelliJ IDEA

提问人:Sc4rocko 提问时间:10/18/2023 更新时间:10/18/2023 访问量:28

问:

我的 Kotlin/JavaFX (Intellij IDEA) 项目中的相对路径有问题。 如果我尝试加载文件,使用绝对路径它可以正常工作,一旦我与亲戚尝试相同的方法,它就不起作用。我检查了一切,拼写等。我在同一包中创建了一个测试类,但它仍然无法加载文件。我发现出了点问题,并在一个空项目中尝试了相同的操作,没有gradle / javafx,我可以使用相对路径加载文件。我的项目配置有问题吗?

stage.icons.add(Image("C:\\Users\\nicol\\spz_app\\dev\\app\\spz\\Spz\\src\\main\\resources\\org\\nico\\spz\\logo.png")); // works
val test = SpzApplication::class.java.getResource("Test.txt")
println(test.toExternalForm("Spz/src/main/resources/org/nico/spz/logo.png")) //does not work

val test = SpzApplication::class.java.getResource("Test.txt")
println(test.toExternalForm("Test.txt")) //does not work as well even though there is a Text.txt file in the same package 

build.gradle:

plugins {
  id 'java'
  id 'application'
  id 'org.jetbrains.kotlin.jvm' version '1.8.10'
  id 'org.javamodularity.moduleplugin' version '1.8.12'
  id 'org.openjfx.javafxplugin' version '0.0.13'
  id 'org.beryx.jlink' version '2.25.0'
}

group 'org.nico'
version '1.0-SNAPSHOT'

repositories {
  mavenCentral()
}

ext {
  junitVersion = '5.9.2'
}

sourceCompatibility = '17'
targetCompatibility = '17'

tasks.withType(JavaCompile) {
  options.encoding = 'UTF-8'
}

application {
  mainModule = 'org.nico.spz'
  mainClass = 'org.nico.spz.SpzApplication'
}

[compileKotlin, compileTestKotlin].forEach {
  it.kotlinOptions {
    jvmTarget = '17'  }
}

javafx {
  version = '17.0.6'
  modules = ['javafx.controls', 'javafx.fxml']
}



dependencies {
  implementation('org.controlsfx:controlsfx:11.1.2')
  implementation 'com.oracle.database.jdbc:ojdbc11:21.1.0.0'
  implementation 'mysql:mysql-connector-java:8.0.28'
  implementation 'org.yaml:snakeyaml:2.0'
  testImplementation("org.junit.jupiter:junit-jupiter-api:${junitVersion}")
  testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${junitVersion}")
  implementation 'org.jfxtras:jmetro:11.6.14'
  implementation 'io.github.palexdev:materialfx:11.16.1'
  implementation "joda-time:joda-time:2.10.10"
}

test {
  useJUnitPlatform()  }

sourceSets {
  main {
    resources {
      srcDirs = ['Spz/src/main/resources']
    }
  }
}

jlink {
  imageZip = project.file("${buildDir}/distributions/app-${javafx.platform.classifier}.zip")
  options = ['--strip-debug', '--compress', '2', '--no-header-files', '--no-man-pages']
  launcher {
    name = 'app'
  }
}

jlinkZip {
  group = 'distribution'
}
kotlin 相对路径

评论

1赞 AndrewL 10/19/2023
(1)阅读文档,你会发现这从类路径加载了源代码,这与文件系统不同。当然,资源可能在文件系统上,但它将被编译到 jar 中(=编译的代码),因此类路径资源的路径相对于已编译资源位置的顶部。(2) 在您的问题中显示您的应用程序的文件结构,例如使用此工具: superuser.com/a/1303475 以获得更好的帮助getResource(..)

答: 暂无答案