在本地的java项目可以正确运行,但是打成jar之后的各种路径问题汇总

 注:我项目使用的springboot搭建的,其他的也应该大同小异!产生这些问题的根源是打jar之后,项目路径会改变。

  • 日志文件输出问题:我项目采用的logback日志输出,输出到当前项目跟路径下的,然后有个定时任务清理日志文件。但是在打jar包放到阿里云服务器之后报错路径找不到这些。下图是在项目log文件和打包jar后的文件。

日志文件本地是输出在项目跟目录下,但是在打jar包之后就会输出到jar包同级目录中,因此我的定时任务按照得到class路径再截取拼凑的方式是不能操作到日志文件的(操作jar包有专门的类)。知道了本地项目的根目录对应的是打jar包之后的上级目录之后就可以采用获取项目根目录的方法来清理日志文件。如下方法获取根目录(不能采用截取拼接方法得到根目录)

path = new File(".").getCanonicalPath();
System.out.println("根路径" + path );

输出如下:根路径F:\JavaProject\hysmyl 。在打包jar后我在win10下测试了,得到的路径就是jar的上级路径:F:\JavaProject\hysmyl\target。jar也在target文件夹下 因此此时在根目录path 下操作生成的log文件是不受打包之后路径改变的影响的!

  • 上传文件到服务器保存的问题。在富文本编辑器上传到服务器之后需要回显图片,因此需要得到图片的存储位置,图片存储位置放在了resouces/static目录下。在本地是可以正确回显的,但是打了jar之后就不能回显了,springboot在本地是能访问到static下的文件的,但是由于打jar之后目录结构会变,因此返回的路径是在jar文件里面的(类似于**.jar!/ 的路径,已经不是普通文件夹了),肯定就访问不到了!

我的解决方法是将文件存储路径改到项目根目录下(同日志文件一样,都需要获取根目录操作图片文件夹),并且给springboot添加一个映射(好处是在打了jar之后,根目录下生成的文件会和jar在同级目录)。如下图

此时springboot是访问不到user-img文件夹的,因此需要添加mvc映射,当想访问user-img的时候映射为file协议,就好比直接将图片拖到浏览器一样,肯定是能正常访问的。(参考博客:https://blog.csdn.net/wanping321/article/details/83246818

//user-img是自己文件夹名字,file代表协议 
registry.addResourceHandler("/user-img/**").addResourceLocations("file:user-img/");

当我们访问localhost:80/user-img/你的图片.jpg的时候是能访问到 根路径下的user-img文件夹里面的文件的.

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值