java如何在可执行jar中给出相对路径?
我有一个Spring应用程序,我正在作为一个应用程序部署。罐子
应用程序必须写入位于/src中的文件夹(确切地说是/src/main/resources/patches
)。我在代码中直接有这个路径
在应用中。属性:PATCH_DIR = src/main/resources/patches
应用程序还必须从src/main/resources/myJson.json
读取json文件,路径也直接写入代码中
在部署之前,当从IDE运行时,一切都很顺利,应用程序可以看到文件和文件夹并正确地读写
在建造之后。jar路径更改时,文件位于myJar.jar/BOOT-if/classes/myJson.json
,文件夹分别位于myJar.jar/BOOT-if/classes/patches
我如何在代码中指定这些路径,即使在构建jar之后,它们仍然与我的应用程序相关
编辑:我可以将文件的路径指定为:PatchApplication.class.getClassLoader().getResource("myJson.json").getPath();
这应该可以解决这个问题,因为路径是相对于类的,而不是相对于项目的根的,但是它并不能改善任何东西
# 1 楼答案
一般来说,所有的类都会进入jar中的classes文件夹
在src/main/java之后结束的所有类都转到/classes/folder 同样,所有的资源文件 你的源文件夹有src/main/java/com/mypack/ABC。java,您将在jar中以/classes/com/mypack/ABC的形式找到它。班级
尝试使用/classes/patches和/classes/myJson。json强>
这应该行得通
# 2 楼答案
您应该在文件系统中指定路径,而不是文件系统中的路径。罐子当您运行应用程序时,它将访问给定路径