网站首页 >> 民俗常识 >> 正文
简介: 1、假设我要将java项目中部分class和配置打成一个jar,然后jar放到其他项目,当访问jar的 *** 时,jar可以访问自己jar里面的配置文件,这样怎样实现呢?2、有人会问为什么要将配置文

python调用jar,java 读取jar里面的配置文件

1、假设我要将java项目中部分class和配置打成一个jar,然后jar放到其他项目,当访问jar的 *** 时,jar可以访问自己jar里面的配置文件,这样怎样实现呢?

2、有人会问为什么要将配置文件打人到jar中呢?可以将配置写错java常量啊,或配置交给调用者去配置啊?

3、其实也是为了满足这样一种场景:某天我要提供一个jar给其他项目组使用,我也不希望他们去搞懂相关的配置,他们只要调用jar的 *** 就好了,所以配置交给调用者沟通的使用的成本会比较高;

4、那为什么不写在jar的常量类里面呢?这就会引发另外一个问题,比如配置里面的某个key的值某天要修改了,那整个jar都不能使用,必须外部重新编译打包新的jar来覆盖了,但是写成配置文件一起打入到jar就不同,jar可以通winRaR的方式打开,修改配置文件,然后保存winRaR就可以了,这样是不是很方便!

5、在开发环境(未打jar前),读取propertis文件方式为

6、\tpublicstaticvoidmain(String[]args)throwsException{\nInputStreamres=null\n\tres=AlibabaMQTT.class.getResourceAsStream("/mqtt-tcp-prop.properties");\t\n\tproperties.load(res);//jar读取\nSystem.out.println("testv="+properties.getProperty("testv"));\n}

此时mqtt-tcp-prop.properties在classpath/下面,直接使用/读取即可

7、当我们将AlibabaMQTT.java和mqtt-tcp-prop.properties打成jar,导入到其他项目中,同样运行:

8、AlibabaMQTT.main(args);

意外的事情发生,出现空指针异常,为什么呢?

9、打成的jar,mqtt-tcp-prop.properties多包了有一层resources文件夹,尽管src/main/resources是classpath,但是打成的jar却多了resources,所以,jar获取配置的方式需要改成下面的:

10、publicstaticvoidmain(String[]args)throwsException{\nInputStreamres=null\n\tres=AlibabaMQTT.class.getResourceAsStream("/resources/mqtt-tcp-prop.properties");\t\n\tproperties.load(res);//jar读取\nSystem.out.println("testv="+properties.getProperty("testv"));\n}

可是问题来了,换成上面的,在开发环境运行又要报错了,两者相互矛盾,所以,我们可以再改进,兼容两者的方式:

11、publicstaticvoidmain(String[]args)throwsException{\nInputStreamres=null\n\t\n//打成jar的读取方式\n\tInputStreamres=AlibabaMQTT.class.getResourceAsStream("/resources/mqtt-tcp-prop.properties");\n\tSystem.out.println("jar模式运行res="+res);\n\tif(res==null){\n\t\t//eclipse中的读取方式,即未打成jar的读取方式\n\t\tres=AlibabaMQTT.class.getResourceAsStream("/mqtt-tcp-prop.properties");\n\t\tSystem.out.println("jar模式运行获取失败,此时为非jar模式运行res="+res);\n\t}\n\t\n\tproperties.load(res);//jar读取\nSystem.out.println("testv="+properties.getProperty("testv"));\n}

这样就实现了jar读取配置的方式,当然这里有不完美地方,就是读取方式有两种,能不能让eclipse打包后的jar,配置文件不包含目录resources呢?

12、这个楼主暂时还没有找到 *** ,希望各位提供宝贵的建议[握手][握手]!

网友点评

博博常识网

博博常识网

www.kissing2lips.com

日常生活里,经常会碰到一些五花八门的小困难。不过好久好在有困难就有方法,如果你足够的细心,你会发现这些小困难都有着对应的小方法。

Powered By Z-BlogPHP Theme By . 鲁ICP备2021032584号-5