如何在可执行jar中提供相对路径?

时间:2017-07-25 15:24:03

标签: java spring deployment jar path

我有一个Spring应用程序,我将其部署为.jar。

应用必须写入位于/ src(精确/src/main/resources/patches)的文件夹。我直接在代码中使用此路径。

在application.properties中: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();

这应该可以解决问题,因为路径是相对于类而不是项目的根,但它并没有改进任何东西。

2 个答案:

答案 0 :(得分:0)

您应该在文件系统中指定一个路径,而不是.jar中的路径。当您运行应用程序时,它将访问给定的路径。

答案 1 :(得分:0)

通常所有课程都会转到jar中的 classes 文件夹。

在src / main / java之后结束的所有类都转到/ classes /文件夹 和所有资源文件类似 例如。你的源文件夹有src / main / java / com / mypack / ABC.java,你可以在jar中找到/classes/com/mypack/ABC.class。

尝试使用/ classes / patches和/classes/myJson.json。

这应该有效