java - 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'
}
}
解决方案
推荐阅读
- javascript - 尝试使用 vuejs 表解决性能问题
- angular - 合并连续 Observables 结果的最佳方法是什么?
- c++ - cmake中qt对象的链接
- git - VS 2017 中正在进行 rebase 操作
- java - 值 STRING_TOO_LARGE 类型
- node.js - 在 mvc express 应用程序中使用 soket.io 模块时出错
- c# - 来自数据库的实体框架更新未显示在我的 edmx 文件中
- reactjs - 如何为 React 中的链接创建可访问的 onClick 处理程序?
- python - Numpy旋转矩阵乘法
- apache-spark - 如何在 PySpark 中将 Pandas 的 DatetimeIndex 转换为 DataFrame?