gpt4 book ai didi

java - 没有资源文件的 Gradle installDist

转载 作者:行者123 更新时间:2023-11-30 01:59:48 25 4
gpt4 key购买 nike

鉴于以下项目设置,运行 ./gradlew run 通过读取资源文件正确打印出 Hello World ,但 ./gradlew installDist && 。/build/install/appresourcetest/bin/appresourcetest 没有,因为它找不到资源文件。为什么会这样?如何在继续使用 installDist 任务的同时解决此问题?

由于资源位于 jar 内,这可能与 installDist 的包装器脚本的类路径设置有关,但这就是我的理解结束的地方。

/build.gradle:

plugins {
id 'java'
id 'application'
}

group 'com.example.application'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

mainClassName = "demo.Main"

repositories {
mavenCentral()
}

dependencies {

}

/settings.gradle:

rootProject.name = 'appresourcetest'

/src/main/resources/test.txt

Hello World

/src/main/java/demo/Main.java

package demo;

import java.io.File;
import java.io.IOException;
import java.util.Scanner;

public class Main
{
public static void main(String[] args) {
//should not fail:
String content = getFile("test.txt");
System.out.println(content);
}


//code taken from:
//https://www.mkyong.com/java/java-read-a-file-from-resources-folder/
private static String getFile(String fileName) {

StringBuilder result = new StringBuilder("");

//Get file from resources folder
ClassLoader classLoader = Main.class.getClassLoader();
File file = new File( classLoader.getResource( fileName).getFile());

try (Scanner scanner = new Scanner( file)) {

while (scanner.hasNextLine()) {
String line = scanner.nextLine();
result.append(line).append("\n");
}

scanner.close();

} catch ( IOException e) {
e.printStackTrace();
}

return result.toString();

}
}

最佳答案

this answer 中所述,您不应该尝试将 test.txt 作为 File 读取,而应使用 getResourceAsStream< 向 ClassLoader 请求一个 InputStream/ 方法。您应该将您的方法 getFile 重写为:

private static String getFile(String fileName) {
StringBuilder result = new StringBuilder("");
try (InputStream in = Main.class.getResourceAsStream(fileName); Scanner scanner = new Scanner(in)) {
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
result.append(line).append("\n");
}
} catch (IOException e) {
// handle exception here
}
return result.toString();

}

并将 String content = getFile("test.txt"); 更改为 String content = getFile("/test.txt");

关于java - 没有资源文件的 Gradle installDist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53258828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com