我正在使用gradle构建uber jar,我使用的插件https://github.com/johnrengelman/shadow
我在src/main/resources
文件夹中有一个json文件,我在下面的代码中使用它
public Repository<Product> initializeData() {
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("product.json").getFile());
System.out.println(file.getAbsolutePath());
Repository<Product> productRepository = new ProductRepository();
return productRepository;
}
当我运行uber Jar时,面临以下问题
$$ java -cp libs/checkout-service-1.0-SNAPSHOT.jar com.noths.runner.Runner
java.nio.file.NoSuchFileException: /home/gradle/checkout-service/file:/home/gradle/checkout-service/libs/checkout-service-1.0-SNAPSHOT.jar!/product.json
at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:92)
at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:116)
at java.base/sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:219)
at java.base/java.nio.file.Files.newByteChannel(Files.java:371)
at java.base/java.nio.file.Files.newByteChannel(Files.java:422)
at java.base/java.nio.file.Files.readAllBytes(Files.java:3206)
at java.base/java.nio.file.Files.readString(Files.java:3284)
at java.base/java.nio.file.Files.readString(Files.java:3243)
at com.noths.runner.Utils.initializeData(Utils.java:21)
at com.noths.runner.Runner.main(Runner.java:21)
Exception in thread "main" java.lang.NullPointerException
at com.noths.promotions.ProductPromotion.apply(ProductPromotion.java:26)
at com.noths.promotions.DefaultPromotionsRunner.setPromotionsChain(DefaultPromotionsRunner.java:21)
at com.noths.checkout.CheckoutServiceImpl.checkout(CheckoutServiceImpl.java:27)
at com.noths.runner.Runner.main(Runner.java:25)
我的build.gradle是这样的
// Shadow Plugin https://github.com/johnrengelman/shadow
plugins {
id "com.github.johnrengelman.shadow" version "6.0.0"
id 'java'
}
group 'com'
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'
compileOnly 'org.projectlombok:lombok:1.18.20'
annotationProcessor 'org.projectlombok:lombok:1.18.20'
testCompileOnly 'org.projectlombok:lombok:1.18.20'
testAnnotationProcessor 'org.projectlombok:lombok:1.18.20'
implementation 'com.google.code.gson:gson:2.8.8'
}
test {
useJUnitPlatform()
}
除非文件系统中有类,否则无法通过File访问类路径。一旦文件在jar中,通过文件的访问就必须失败。
所以你应该做的是一个类加载器。getResource(…)或者一个getClass()。getResource(…)。如果返回null,则表示传递的字符串与类路径上的某个内容不匹配,您需要确定是否需要修复该字符串或jar文件。如果您获得了一些资源,那么直接打开流并读取数据。
另见https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Class.html#getResource(java.lang.String)https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/net/URL.html#openStream()
我不太愿意使用getClass()。getResourceAsStream(…)因为您保存了一个函数调用,但如果资源不存在,则无法给出正确的错误消息。
Spring靴-1.4.1;IDE-IntelliJ 2016.3。EAP 我试图加载资源如下; 和 当我从IDE运行应用程序时,这两种方法都可以正常工作,但当我尝试将应用程序构建为war并将其部署到Tomcat上时,这两种方法都不起作用。 有人能帮我解决这个问题吗? 谢谢
我有一个maven Spring项目,里面有文件。如何在SpringMVC控制器中读取它。 我正在使用 但是is.
我有一个目录结构如下的maven模块,我想在中获取的路径 我使用进行了尝试,但它给出了一个空值。 无法获取资源的路径
null null WEB-INF 类 com... 图像 字体 JS CSS messages_en.properties 为什么maven将所有资源放在classes文件夹下?我的文件夹结构错了吗?
我想问一下,如何在SpringBoot中将文件夹作为资源或文件加载。假设我有src/main/resources/testfolder,我想做如下事情: ^但这将失败,因为ResourceUtils只能加载实际文件(.txt、.csv等),不是文件夹。。提前非常感谢。。 编辑: 原因是我需要得到文件夹的绝对路径... folderpath应该是“/workspace/intellij/Projec
我正在尝试访问src/main/Resources/XYZ/view文件夹中的xsd,其中XYZ/view文件夹是由我创建的,文件夹具有我需要进行xml验证的abc.xsd。 当我每次尝试访问xsd时,结果为null, 我试过了, 1) 2) 以及我为获取资源或类加载器等而进行的更多跟踪。 最后我得到了xsd, 文件文件 = 新文件(新类路径资源(“/src/main/resources/XYZ/