首页 > 解决方案 > Gradle 项目获取资源时返回 null

问题描述

我正在尝试从我的 res 文件夹中获取资源。它在 IDE 中工作(我使用 IntelliJ,jdk 8),但是当我导出它(使用 shadowJar)时,它说文件不存在,但它在 jar 中。

我的代码:

static String getTranslate(String lang, String object) throws IOException
{
        String defaultFile = Objects.requireNonNull(Thread.currentThread().getContextClassLoader().getResource(lang + ".json")).getFile(); //ERROR

        return JsonParser.parseReader(new FileReader(defaultFile)).getAsJsonObject().get(object).getAsString();
}

例外:

java.io.FileNotFoundException: file:/media/vaclav/Data/IdeaProjects/ClearTemp/build/libs/ClearTemp-1.0-SNAPSHOT-all.jar!/en.json (Adresář nebo soubor neexistuje)
        at java.io.FileInputStream.open0(Native Method)
        at java.io.FileInputStream.open(FileInputStream.java:195)
        at java.io.FileInputStream.<init>(FileInputStream.java:138)
        at java.io.FileInputStream.<init>(FileInputStream.java:93)
        at java.io.FileReader.<init>(FileReader.java:58)
        at me.engo.cleartemp.assets.Tools.getTranslate(Tools.java:351)
        at me.engo.cleartemp.assets.API.clearTemp(API.java:21)
        at me.engo.cleartemp.Main.main(Main.java:14)

我的 build.gradle:

plugins
{
    id 'java'
    id "com.github.johnrengelman.shadow" version "6.0.0"
}

group 'me.engo'
version '1.0-SNAPSHOT'

repositories
{
    mavenCentral()
}

dependencies
{
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'

    implementation group: 'commons-io', name: 'commons-io', version: '2.8.0'
    implementation 'com.google.code.gson:gson:2.8.7'
}

test
{
    useJUnitPlatform()
}

jar
{
    manifest
    {
        attributes 'Main-Class': 'me.engo.cleartemp.Main'
    }
}

我的资源文件夹

标签: javagradleintellij-idea

解决方案


推荐阅读