javajar包资源_⼀个⼩坑:java如何访问依赖jar包中的资源⽂
件
后来查资料发现是java获取依赖jar包中资源⽂件跟获取本⼯程中的资源⽂件的使⽤姿势还是有⼀定区别的,没有使⽤正确的姿势,经过修正后,我的jar包中的接⼝欢快的跑起来了。
在逻辑中涉及到拷贝本地配置⽂件和启动脚本到远端的操作,这个配置⽂件是作为⼀个⼯程内的资源⽂件存在的,其路径为:
NFIT_PACKAGE\src\main\resources\cmdline_
需要先获取本地⽂件然后再传递,这⾥我⼀开始⽤了⼀个SystemResource⽅法来获取⽂件,如下所⽰:String localFilename = "cmdline_";
localFilepath = SystemResource(localFilename).getPath();
File localfile =new File(localFilepath);
boolean ret = NFITService.putFiletoRemote(localfile, remotePath,localFilename);
java学习资源
在NFIT这个包内直接运⾏没有任何问题,结果输出如下,可以从⽇志中看到传输成功了: [INFO ]10:27:07, [Class]NFITServiceImpl, [Method]putFileInputStreamtoRemote, =========putFiletoRemote==========
[INFO ]10:27:07, [Class]NFITServiceImpl, [Method]putFileInputStreamtoRemote, remotefile is
/home/hzcuixiaoqing/
[INFO ]10:27:07, [Class]NFITServiceImpl, [Method]putFileInputStreamtoRemote, =========putFiletoRemote
Success!==========
但是为什么打包以后在其他⼯程中调⽤会出错呢,可以注意到错误提⽰⾥⾯提⽰的是(⽂件名、⽬录名或卷标语法不正确。) 并且查看打印的绝对路径\C\Users\hzcuixiaoqing.m2\repository\com\netease\qa\cloudqa\nfit \0.1.0\nfit-0.1.0.jar!\cmdline_ 存在⼀个nfit-0.1.0.jar!叹号,并且查看这个⽬录,由于指向的确实是⼀个jar包,因此这样的路径确实访问不到cmdline_ 这个⽂件。那如何来解决这个问题呢,难道jar包中的资源都没办法获取了么,当然不是!
java的类装载器(ClassLoader)早就考虑到了这⼀点。
ClassLoader是个什么东东呢:ClassLoader 是类加载器的抽象类。它可以在运⾏时动态的获取加载类的运⾏信息。 可以这样说,当我们调⽤jar中的Resource类时,JVM加载进Resource类,并记录下Resource运⾏时信息(包括Resource所在jar包的路径信息)。⽽ClassLoader类中的⽅法可以帮助我们动态的获取这些信息。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论