• 关于在打包Jar文件时遇到的资源路径问题(二)


    在关于《关于在打包Jar文件时遇到的资源路径问题(一)》中,以及描述了当资源与可执行JAr分离时的资源路径代码的编写问题,后来想了想,为什么将《Java核心技术卷一》中的程序10-1即ResourceTest的Jar文件放在任何地方都可以执行呢?

    图:将原本一起放入目录中的Jar放到桌面上,点击依然能执行

    于是我将这个Jar包进行解压,发现在这个包中依然有资源,这就说明了这个包在脱离了原先目录而执行时,依据的资源路径应该是在自己的Jar包中。(至于这个Jar在原先目录时是根据自己包中的资源还是目录中的资源我并不清楚,因为按照在关于在打包Jar文件时遇到的资源路径问题(一)所描述的,在同一目录下的资源能作为URL传递进去也是可以解释的)

       解压之后:------>     

    接下来的问题就是如何在打包的时候将资源也一同打包进Jar包中

    方法(一) : 在cmd中使用 jar cvf *.class *.gif 或者后面再接别的资源类型的通配符格式,然后再使用 java -jar XXX.jar 。

    方法(二) : 使用Eclipse方式如何操作呢:

        方法:将资源或者包含资源的文件目录放入项目文件夹中的某个文件夹,这里又有两种方式可以放置:

    首先注意一点:打包时只有在项目文件下的src文件夹中才能打包进Jar包中,其他地方即使在该项目下也不能被打包进Jar包中

    其次,每次新放置了资源后要对Eclipse的项目资源管理器进行刷新,这样才能正确打包

    最后以下两种方法都是在Eclipse编译时会报错,但是打包出来运行时就可以了,这就是本文同上一篇《关于在打包Jar文件时遇到的资源路径问题(一)》最大的不同之处。

    ================================正文开始分割线=================================================

    方式一:放在src文件下,就是同其他任何包在src目录下,这种方式需要使用绝对资源位置(最前面加“/”):

      例如在ImageViewerProject项目中,将palette.gif放在src目录下,同在这个目录下的还有image包,该包中就是主程序

    图:将palette.gif放在src目录下

    图:在Eclipse中的项目资源管理器空白处进行刷新

    图:刷新之后将会看到palette.gif资源将会出现在src目录下

    程序一定要使用绝对资源路径:

    chooser.setAccessory(new PreImageViewer(chooser));
    URL picUrl = this.getClass().getResource("/palette.gif");

    这时将该程序导出成Jar包,无需再添加资源到该Jar包所在目录,就可以直接运行了:

    将这个Jar包进行解压,可以看到palette.gif就在其中,而且同image包处于同一目录下:

    但是还是离《Java核心技术》所示的例子还差一步,因为其示例代码所用的是相对资源路径,那么该如何做到呢,答案就在方式二。

    =========================================================================

    方式二:将资源放入程序所在的包中,此时还未打包前该包中还是各种.java文件:

    例如在ImageViewerProject项目中,将palette.gif放在src目录下的image包中,该包中就是主程序,也就是说资源和源代码放在了一起:

    图:将palette.gif放在源码包目录下,和源程序放在了一起

    对Eclipse进行刷新:

    这样,在程序中就可以不一定使用绝对资源路径,可以使用相对资源路径,代码就可以变成这样:

    chooser.setAccessory(new PreImageViewer(chooser));
    URL picUrl = this.getClass().getResource("palette.gif");

    现在利用Eclipse对程序进行打包,同样的,无需无需再添加资源到该Jar包所在目录,就可以直接运行了:

    依然对这个Jar进行解压来看看内部,与方式一不同,这次资源就在解压的目录下,而是在class文件所在的包中,和字节码文件在一起:

      打开image包------->

    =================================================================================================================

    因此可以使用这两种方式将资源进行同代码一起打包进Jar包,这两种方式并没有说哪个好哪个坏,从资源所在的位置就能看出,因此还是具体情况具体分析。

      同理,无论是这一篇博客还是上一篇的《关于在打包Jar文件时遇到的资源路径问题(一)》,这些方法都必须根据实际情况进行选择:

    如果是资源需要经常修改,那么就可以使用《关于在打包Jar文件时遇到的资源路径问题(一)》所介绍的方法,将可执行Jar包和资源分离,这样易于改动,而不需要将Jar包解压修改后在复原;

    如果是某些资源不需要修改,那么就可以使用本文中的方式,将资源和字节码文件一起打包进Jar包中,这样易于将应用程序移动,

    当然,如果结合这两者方式,对固定资源和常修改资源进行分类处理,能获得更好的效果。

  • 相关阅读:
    python 遍历文件夹 文件
    Docker使用常见问题
    Docker基础技术:DeviceMapper
    更改Docker默认的images存储位置
    NAT方式,宿主机无法ping通虚拟机
    centos7使用问题总结
    VMWare虚拟机提供的桥接、nat和主机模式的区别
    css之'>'
    eclipse安装插件:
    腾讯后台开发面试总结,原创,吐血推荐!!
  • 原文地址:https://www.cnblogs.com/fjdingsd/p/4681204.html
Copyright © 2020-2023  润新知