收藏 分销(赏)

调用jar包外配置文件.doc

上传人:xrp****65 文档编号:8752502 上传时间:2025-03-01 格式:DOC 页数:9 大小:268KB
下载 相关 举报
调用jar包外配置文件.doc_第1页
第1页 / 共9页
调用jar包外配置文件.doc_第2页
第2页 / 共9页
点击查看更多>>
资源描述
项目中,经常把一部分功能独立出来,做一个java project,然后打成jar包供其他项目引用。这时候,如果jar包中需要读取配置文件信息,则很少把该配置打进jar包,因为它不方便修改,更多都是采用jar包读取外部配置文件。 案例: 项目工程名:auth -- 很明显,做鉴权使用的 项目配置文件:init.properties log4j.properties init.properties 很明显是读取数据库配置的,log4j.properties就不解释啦 driver=oracle.jdbc.driver.OracleDriver url=jdbc:oracle:thin:@192.168.6.234:1530:billdb user=dw passwd=dw123 testsql=select sysdate from dual 项目引用jar包: lib/servlet-api.jar lib/log4j-1.2.15.jar lib/commons-collections-3.1.jar lib/commons-logging-1.0.4.jar lib/commons-pool.jar lib/ojdbc14.jar 读取配置文件示例: public class Config { private static Properties properties; private static Logger logger = Logger.getLogger(Config.class); static { try { properties = new Properties(); // 读取SRC下配置文件 --- 属于读取内部文件 properties.load(Config.class.getResourceAsStream("/init.properties")); } catch (IOException e) { logger.error("读取配置信息出错!"); } } public static String getObject(String prepKey) { return properties.getProperty(prepKey); } public static void main(String[] agrs) { logger.info(Config.getObject("testsql")); } } 目录结构如下: 解决方案I:自定义 manifest.mf 文件 a. 在项目下新建文件 manifest.mf,内容如下: Manifest-Version: 1.0 Class-Path: lib/servlet-api.jar lib/log4j-1.2.15.jar lib/commons-collections-3.1.jar lib/commons-logging-1.0.4.jar lib/commons-pool.jar lib/ojdbc14.jar 解释: Manifest-Version: 1.0 版本号,没啥特殊含义,但一定要有; Class-Path: 所有引用的jar包 注意: 每个“:”后面都要加空格,Class-Path中每个jar包间也加空格 最后一行为空行 截图如下: b. 通过Eclipse 到处jar包 右键项目工程----Export --à选择Java下 JAR File,下一步 选择工程的src目录(其他的lib,.setting都不选中),去掉两个配置文件的选项(配置文件外部读取),选择导出jar包的位置; 注意:右侧的.classpath这些都不要选中,只把src下的java文件打包。 下一步 下一步:选中自定义的manifest.mf文件,完成 测试: 新建项目,导入刚刚生成的jar包和jar需要的所有包(把jar包所在工程lib下所有引用jar拿过来),在src下写入配置文件,目录结构如下: 测试: public class Demo1 { /** * @param args */ public static void main(String[] args) { System.out.println(Config.getObject("testsql")); ConnectionUtil.main(null); } } 测试结果: log4j:WARN No such property [datePattern] in org.apache.log4j.RollingFileAppender. select sysdate from dual 14:07:15,297 INFO ConnectionUtil:87 - ====== 当前系统日期是:2011-07-26 12:00:00 这就是方案1,总结: 自定义 manifest.mf 文件,配置清楚jar所需要的所有lib。 当其他系统引用该jar时,相当于把包拉到系统中(jar的内容相当于系统自定义的),它读取的配置文件就是从系统的classpath下读取。 方案II:定义配置文件的绝对路径 a. 工程src下新建目录config,存放配置文件;(以前都是直接存放在src目录下的);目录结构如下: b. 修改获取配置文件的方式,代码如下: public class Config { private static Properties properties; private static Logger logger = Logger.getLogger(Config.class); static { try { PropertyConfigurator.configure(System.getProperty("user.dir") + "/config/log4j.properties"); properties = new Properties(); // 读取SRC下配置文件 --- 属于读取内部文件 // properties.load(Config.class.getResourceAsStream("/init.properties")); // 读取系统外配置文件 (即Jar包外文件) --- 外部工程引用该Jar包时需要在工程下创建config目录存放配置文件 String filePath = System.getProperty("user.dir") + "/config/init.properties"; InputStream in = new BufferedInputStream(new FileInputStream( filePath)); properties.load(in); } catch (IOException e) { logger.error("读取配置信息出错!",e); } } public static String getObject(String prepKey) { return properties.getProperty(prepKey); } public static void main(String[] agrs) { logger.info(Config.getObject("testsql")); } } 看代码: 设置log4j.properties的位置 PropertyConfigurator.configure(System.getProperty("user.dir") + "/config/log4j.properties"); 设置init.properties的位置 String filePath = System.getProperty("user.dir") + "/config/init.properties"; 导出项目jar包: 同上面的导出方式,只导出src下的java文件(config,lib等不选) 使用默认生成的manifest.mf文件 导出成功。 在项目中引用,同上面的一样,但是在引用项目中,需要在src目录下创建config目录才存放配置文件,目录结构如下: 同样测试成功。 总结: System.getProperty("user.dir") 获得项目的绝对路径,然后拼装配置文件的路径。 参考日志: http://hnsswjjxy-163- http://lijun0349-163- 如何读取JAR包外的properties文件及打成jar包后无法读取到jar包内的properties文件 2011年06月21日 星期二 19:24 打成jar包后无法读取到jar包内的properties文件 发现在eclipse里一切正常,但打成jar包后就无法读取到properties文件了。 之前的程序是这样获取配置文件的: Thread.currentThread().getContextClassLoader().getResource("").getPath() +filename+".properties")  来获取properties文件,但发现一运行就报错.后来将代码改成: this.getClass().getClassLoader().getResourceAsStream(filename+".properties") 一切正常~ 关于java 的 classloader 还是有点概念不清,需要补补~~   以下内容转载自: http://hnsswjjxy-163- 一般在项目中使用properties配置文件的时候都将相关的properties文件放在src目录下,在将该app打包生成jar后,相应的properties配置文件生成在jar包中,这样的话要修改配置文件又要重新打jar包,那是相当的麻烦。。 既然这么麻烦,你肯定想将配置文件放在其他的目录下,生成的jar包内不包含相应的配置文件,修改配置文件无需重新打包,没错,下面就是一种解决方案了。 读取jar包内配置文件: InputStream in = this.getClass().getClassLoader().getResourceAsStream("/configfilename.properties");   读取jar包外配置文件: String filePath = System.getProperty("user.dir") + "/conf/configfilename.properties";      InputStream in = new BufferedInputStream(new FileInputStream(filePath));    
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服