如何打开jar文件? 如何运行jar文件


假设我想在Java项目中创建一个包含一些类和配置的jar,然后将该jar放入其他项目中 。访问jar方法时,jar可以访问自己jar中的配置文件 。我该怎么做?
有人会问,为什么要将配置文件插入jar?我是否可以将配置写入错误的Java常量,或者将配置交给调用方进行配置?
事实上,这也是为了满足这样的场景:有一天我想提供一个jar供其他项目团队使用,我不想让他们理解相关的配置 。他们只需要调用jar方法,因此配置和与调用者通信的成本相对较高;
为什么不在jar的常量类中编写呢?这将导致另一个问题 。例如,如果某一天要修改配置中某个键的值,则不能使用整个jar 。您必须在外部重新编译和打包新的jar以覆盖它 。但是,将配置文件写入jar是不同的 。可以通过WinRAR打开jar,修改配置文件,然后保存WinRAR 。这很方便吗!
假设项目结构为:

如何打开jar文件? 如何运行jar文件

文章插图

在开发环境中(jaring之前),将属性文件读取为
tpublicstaticvoidmain(String[]args)引发异常{nInputStreamres=nullntres=AlibabaMQTT.class.getResourceAsStream(u0026#34;/mqtttcpprop.propertiesu0026#34;);tnt财产 。负载(res);//Jar读取n系统输出 。println(u0026#34;testv=u0026#34;properties.getProperty(u0026#34;testvu0026#34;);n}
此时,classpath/下的mqttTCPprop属性可以直接使用/读取
当我们放置alibabamqtt时,Java和mqttTCPprop属性被Jared,导入到其他项目中,并按如下方式运行:
AlibabaMQTT 。主(args);
当发生意外情况时,将发生空指针异常 。为什么?
让我们观察一下jar结构:

如何打开jar文件? 如何运行jar文件

文章插图


如何打开jar文件? 如何运行jar文件

文章插图

类型化jar,mqttTCPprop在properties多包中有一层Resources文件夹 。尽管src/main/resources是一个类路径,但类型化jar中有更多的资源 。因此,需要将获取JAR配置的方式更改为:
publicstaticvoidmain(String[]args)引发异常{nInputStreamres=nullntres=alibababamqtt.class.getResourceAsStream(u0026#34;/resources/mqtttcpprop.propertiesu0026#34;);tnt财产 。负载(res);//Jar读取n系统输出 。println(u0026#34;testv=u0026#34;properties.getProperty(u0026#34;testvu0026#34;);n}
然而,问题出现了 。如果更改为上述选项,则在开发环境中运行时将报告错误 。这两者相互矛盾 。因此,我们可以改进与两者兼容的方式:
Publicstaticvoidmain(string[]args)引发异常{nInputStreamres=nullnTN//jarprinting的读取方法ntinputstreamres=alibabamqtt.class.getresourceasstream(u0026\34;/resources/mqtttcpprop.propertiesu0026\34;);nt系统 。出来Println(运行res=u0026\34;jar模式下的res);NTIF(res==null){Ntt//AndyLau中的读取方法,即非jar类型的读取方法Nttres=Alibabamqtt.class.getresourceasstream(u0026\34;/mqtttcpprop.propertiesu0026\34;);ntt系统 。出来Println(u0026\34;jar模式操作获取失败,本例为非jar模式操作res=u0026\34;res);nt}ntnt属性 。负载(res);//Jar读取n系统输出 。println(u0026#34;testv=u0026#34;properties.getProperty(u0026#34;testvu0026#34;);n}
这使jar能够读取配置 。当然,这里有一个缺陷,那就是有两种阅读方法 。AndyLau可以打包jar并使配置文件不包含目录资源吗?
房东还没有找到办法 。我希望你能提供宝贵的建议[握手][握手]!


    以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

    「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: