Gradle在Ubuntu上为现有文件抛出NoSuchFileException

时间:2019-02-17 21:25:56

标签: java unix gradle spock

我正在研究一个较小的Gradle项目,并且想在Spock测试中使用我的Reader类。当我开始测试时,Reader类会抛出:

java.nio.file.NoSuchFileException

在我的Gradle项目中,我在test.txt中有/src/test/resources个文件。当我用Reader进行测试时,Gradle会向我显示:

java.nio.file.NoSuchFileException: file:project_path/build/resources/test/test.txt

即使该路径中有一个文件。我同时使用终端和浏览器进行了检查。

我在Ubuntu上使用Java 11。

//Reader class read lines:    
try (Stream<String> stream = Files.lines(Path.of(String.valueOf(getClass().getClassLoader().getResource(fileName)))))

//gradle.build without test dependencies
apply plugin: "java"
apply plugin: "groovy"

group = "com.example"
version = "1.0"
sourceCompatibility = "1.11"

repositories {
    mavenCentral()
}

1 个答案:

答案 0 :(得分:1)

更改您的Reader读取逻辑:

try (Stream<String> stream = Files.lines(Path.of(ClassLoader.getSystemResource(fileName).toURI()))) {
    ...
}

Path.of()将在使用URI时创建正确的路径: /project_path/build/resources/test/test.txt ,因为它将从URI中的协议指定的提供者中提取路径(文件:)。

但是,当您为Path.of()参数调用String时,它会假定它是真实路径(在您的情况下为 file:project_path / build / resources / test / test.txt )。