您现在的位置是:首页 > 编程语言学习 > 后端编程语言 > 文章正文 后端编程语言

SpringBoot项目中jar发布如何获取jar包所在目录路径

2022-07-25 10:25:26 后端编程语言

简介在开发过程中,我们经常要遇到上传图片、word、pdf等功能,但是当我们把项目打包发布到服务器上时,对应的很多存储路径的方法就会失效,下面这...

在开发过程中,我们经常要遇到上传图片、word、pdf等功能,但是当我们把项目打包发布到服务器上时,对应的很多存储路径的方法就会失效,下面这篇文章主要给大家介绍了关于SpringBoot项目中jar发布获取jar包所在目录路径的相关资料!

示例代码:

  1. //第一种 
  2. File path = new File(ResourceUtils.getURL("classpath:").getPath()); 
  3. if(!path.exists()) path = new File(""); 
  4. System.out.println(path.getAbsolutePath()); 
  5. //第二种 
  6. System.out.println(System.getProperty("user.dir")); 
  7. //第三种 
  8. String path1 = ClassUtils.getDefaultClassLoader().getResource("").getPath(); 
  9. System.out.println(URLDecoder.decode(path1, "utf-8")); 
  10. //第四种 
  11. String path2 = ResourceUtils.getURL("classpath:").getPath(); 
  12. System.out.println(path2); 
  13. //第五种 
  14. ApplicationHome h = new ApplicationHome(getClass()); 
  15. File jarF = h.getSource(); 
  16. System.out.println(jarF.getParentFile().toString()); 

这几种获取项目目录的方式中,其中:

第一种、第二种得到的结果一致

第三种、第四种得到的结果一致

但是,不同的运行方式,他们的结果是有偏差的。下面我们来看下不同情况下依次打印的路径是什么。

先看下直接在idea中运行main方法启动项目时候,打印的路径,显示如下:

再看下打包成jar包中,打印的路径

第一种执行方式

操作方式:打开命令行,目录切换到jar包所在目录,然后执行 jar -jar 启动命令,打印的路径如下:

第二种执行方式

操作方式:打开命令行,直接java -jar E:/web_pack/bis_exporter-1.0-SANPSHOT.jar,即不切换到jar所在目录,而是直接执行,打印的路径如下:

是不是发现问题了!在这种情况下,第一种和第二种方式打印的路径是不对的,他打印的路径就是当前执行命令时所在的目录。这就很容易造成不必要的bug

例如:我们在jar的根目录写一个自定义数据配置文件,通过第一种或者第二种方式读取数据,那么使用远程执行jar的方式,就一定会报找不到配置文件的错误。

补充:springboot获取运行Jar包的目录

  1. //linux和windows下通用 
  2. private String getJarFilePath() { 
  3. ApplicationHome home = new ApplicationHome(getClass()); 
  4. File jarFile = home.getSource(); 
  5. return jarFile.getParentFile().toString(); 

总结

综上所述,最好使用第五种方案,获取运行jar所在的目录。

相关文章

站点信息