记录:
今天遇到一个问题,我在压缩文件的时候,把文件准备写入相对路径classes里面的。在本地跑起来还是没有问题的,但是在打包成jar 去服务器跑起来的时候,发现了异常问题,就是找jar包里面的路径是不存在的。。。。原因是系统会认为,jar是一个文件,不存在对应的目录。
当时报的异常为:/home/dpass/agr_8892/agr-api-1.0.0/lib/agr-api-1.0.0.jar!/BOOT-INF/classes!/opcTemplate.xml (No such file or directory)
java.io.FileNotFoundException: file:/home/dpass/agr_8892/agr-api-1.0.0/lib/agr-api-1.0.0.jar!/BOOT-INF/classes!/opcTemplate.xml (No such file or directory)
很明显上面文件去jar包里面去找classes路径了。这样是不对的,所以,需要另外指定文件路径解决办法就很简单了。要么在配置文件指定路径去,要么就是找到linux上jar上面所在路径,然后找对应的系统目录。
但是指定路径之后,本地再跑,就需要创建好你指定好的路径。把资源文件放进去。这样的话比较麻烦。我就直接判断了是idea本地跑。还是打包到linux部署:
ApplicationHome h = new ApplicationHome(ClagreementInfoController.class);
File jarF = h.getSource();
//判断是本地启动还是jar启动
boolean target = jarF.getParentFile().toString().contains("target");
如果包含target路径,其实就是本地idea在跑了。
if (target) {
resource = jarF.getAbsolutePath().toString()+separator+opc;
} else {
resource = jarF.getParentFile().getParentFile() + temDic + opc;
}
String temDic = "/config/";
String resource;
String opc = "资源文件";
如果本地再跑。就把资源文件的路径设置到classes;
如果是linux上跑的jar 就直接往上找2层目录。然后找到自己定义的目录即可;
可以尝试在本地跑一下这个main方法,查看一下返回目录大概就能明白了。
public static void main(String[] args) {
ApplicationHome h = new ApplicationHome(ClagreementInfoController.class);
File jarF = h.getSource();
//当前所在目录
System.out.println(jarF.getAbsolutePath().toString());
//是否包含target目录
System.out.println(jarF.getParentFile().toString().contains("target"));
//所在位置上层目录
System.out.println(jarF.getParentFile().toString());
//所在位置上两层目录
System.out.println(jarF.getParentFile().getParentFile().toString());
}
版权声明:本文为weixin_44491974原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。