SpringBoot项目jar发布获取jar包所在目录路径
2023-09-14 09:06:17 时间
//第一种
File path = new File(ResourceUtils.getURL("classpath:").getPath());
if(!path.exists()) path = new File("");
System.out.println(path.getAbsolutePath());
//第二种
System.out.println(System.getProperty("user.dir"));
//第三种
String path1 = ClassUtils.getDefaultClassLoader().getResource("").getPath();
System.out.println(URLDecoder.decode(path1, "utf-8"));
//第四种
String path2 = ResourceUtils.getURL("classpath:").getPath();
System.out.println(path2);
//第五种
ApplicationHome h = new ApplicationHome(getClass());
File jarF = h.getSource();
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的方式,就一定会报找不到配置文件的错误。
总结
综上所述,最好使用第五种方案,获取运行jar所在的目录。
获取springboot项目根路径
// 获取项目根路径
final File basePath = new File(ResourceUtils.getURL("classpath:").getPath());
这个再Windows下是可以的,但是在Linux (centos7)下是不行的,正确的获取方法:
Resource resource = new ClassPathResource("");
System.out.println(resource.getFile().getAbsolutePath());
相关文章
- SpringBoot是什么?
- SpringBoot框架理解[通俗易懂]
- 记一次SpringBoot启动异常,jar问题的排查分析
- springboot线程池的配置使用[通俗易懂]
- springboot集成ribbon
- SpringBoot项目Jar包运行没有主清单属性
- springBoot整合Mybatis-Plus需要的依赖_springboot中文手册
- SpringBoot-自动配置特性
- Centos7 运行Springboot打包后的jar文件的相关操作
- SpringBoot系列之数据库初始化-datasource配置方式
- 如何自定义redis工具jar包供其他SpringBoot项目直接使用
- SpringBoot之启动加载数据 CommandLineRunner(G)详解编程语言
- SpringBoot热部署简介详解编程语言
- Oracle数据库连接的Java Jar包实现(oracle连接jar包)
- springboot-springcloud-eureka 服务注册与发现,负载均衡客户端(ribbon,feign)调用详解编程语言
- Linux下快速运行Jar程序的方法(linux运行jar程序)
- MySQL 5.7: A Jar of Database Solutions(mysql5.7jar)
- Linux下利用Jar命令打包文件(linux打包命令jar)
- Linux下快速启动Jar包(linux启动jar包)
- 快速搭建MySQL数据库:Jar包驱动方案(mysql数据库驱动jar包)
- 包一键安装:在Linux下运行Jar包(linux下运行jar)
- 使用SQLServer驱动JAR解决数据库连接问题(sqlserver驱动jar)
- MySQL数据库的Java驱动程序JAR包下载(mysql中jar包下载)