假设我想在Java项目中创建一个包含一些类和配置的jar,然后将该jar放入其他项目中 。访问jar方法时,jar可以访问自己jar中的配置文件 。我该怎么做?
有人会问,为什么要将配置文件插入jar?我是否可以将配置写入错误的Java常量,或者将配置交给调用方进行配置?
事实上,这也是为了满足这样的场景:有一天我想提供一个jar供其他项目团队使用,我不想让他们理解相关的配置 。他们只需要调用jar方法,因此配置和与调用者通信的成本相对较高;
为什么不在jar的常量类中编写呢?这将导致另一个问题 。例如,如果某一天要修改配置中某个键的值,则不能使用整个jar 。您必须在外部重新编译和打包新的jar以覆盖它 。但是,将配置文件写入jar是不同的 。可以通过WinRAR打开jar,修改配置文件,然后保存WinRAR 。这很方便吗!
假设项目结构为:
文章插图
在开发环境中(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,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小编还为您精选了以下内容,希望对您有所帮助:- 冬天如何去湿气呢
- 最快去除口香糖的妙招 口香糖粘在衣物上如何弄掉
- 烤箱爆炸该如何解决?
- 华为手机没有网络怎么恢复 华为手机数据打开没网络怎么办
- 评测JEEP指南者怎么样及JEEP指南者的性能如何
- 膨珊瑚怎样施肥 膨珊瑚如何施肥
- 2022年1月19日是农历几月几号-日子如何
- 农历2022年四月十二出生的男孩子五行缺什么-命运如何
- 微信快速找群加群 微信如何搜群加群
- 男生情人节约会技巧和攻略 教你如何赢得美人心