项目中,经常把一部分功能独立出来,做一个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 文件

  1. 在项目下新建文件 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包间也加空格

最后一行为空行

截图如下:

  1. 通过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:定义配置文件的绝对路径

  1. 工程src下新建目录config,存放配置文件;(以前都是直接存放在src目录下的);目录结构如下:

  1. 修改获取配置文件的方式,代码如下:

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目录才存放配置文件,目录结构如下:

同样测试成功。

总结:

1. System.getProperty("user.dir") 获得项目的绝对路径,然后拼装配置文件的路径。

2. 读取jar包内配置文件:

InputStream in = this.getClass().getClassLoader().getResourceAsStream("/configfilename.properties");

3. 读取jar包外配置文件:

String filePath = System.getProperty("user.dir") + "/conf/configfilename.properties";

InputStream in = new BufferedInputStream(new FileInputStream(filePath));

Java如何读取JAR包外的properties文件及打成jar包后无法读取到jar包内的properties文件相关推荐

  1. 如何读取jar包外的properties文件和log4j.properties

    2019独角兽企业重金招聘Python工程师标准>>> 时间有限,不做排版和具体讲述问题产生的过程,下面是我的解决方案,已证实有效,其中Log4jP = "log4j.pr ...

  2. 如何读取jar包外的properties和log4j.properties等配置文件

    一般在项目中使用properties配置文件的时候都将相关的properties文件放在src目录下,在将该app打包生成jar后,相应的properties配置文件生... 一般在项目中使用prop ...

  3. Spring Boot 配置 jar 包外面的 Spring Properties 文件

    一.概述 Properties 文件是我们可以用来存储项目特定信息的常用方法.理想情况下,我们应该将其保留在 jar 包之外,以便能够根据需要对配置进行更改. 在这个教程中,我们将研究在 Spring ...

  4. 打包部署后无法读取jar包里的文件(实测可行,Java中读取jar包中的文件)

    打包部署后无法读取jar包里的文件 Java中读取jar包中的文件 linux中无法读取jar包中的内容(windows可以的!),如何解决 一.背景 项目中免不了需要读取文件,如果文件用绝对路径读取 ...

  5. java jar反编译后保存_java根据jar包反编译后修改再打包回jar的做法

    1. 得到一个待要修改的jar包 2. 我的环境是windows,然后解压这个jar包,得到一堆class文件,这时候就找到你需要的那个class文件 3. 我首先是使用jd-gui工具看一下这个cl ...

  6. Spring Boot+Maven将配置文件打包到Jar包外方便运维修改配置

    导语   在小公司使用Spring Boot部署上线,因为环境太多,导致运维开发相互之间重复的打包jar包运行到不同的环境上,使用容器技术又显得有点浪费,所以就先将配置文件打包的jar包外面.然后运维 ...

  7. linux java jar包项目如何安装在win系统 设置开机自启等配置 - jar包配置不用改

    大家都知道  linux 是没有c盘或者d盘 我们部署linux项目的时候  , java 上传的文件都是在当前项目的目录下, 我们需要把项目部署到win系统的时候 在不改其jar包的配置下,在指定盘 ...

  8. idea打出瘦版jar包 -- 依赖jar文件放在包外

    1. 打开Project Structure窗口 2.打开Artifacts窗口 按照图内容进行设置 3.新建lib文件夹 按下图进行操作 4.将依赖jar包放入lib文件夹中 5.配置ClassPa ...

  9. 封装成jar包_通用源码阅读指导mybatis源码详解:io包

    io包 io包即输入/输出包,负责完成 MyBatis中与输入/输出相关的操作. 说到输入/输出,首先想到的就是对磁盘文件的读写.在 MyBatis的工作中,与磁盘文件的交互主要是对 xml配置文件的 ...

最新文章

  1. 【拯救赵明】DDoS那些事
  2. SpringBoot定时任务@EnableScheduling
  3. Maven搭建简单的SS项目
  4. hdu 4497 GCD and LCM
  5. 解决由于操作顺序问题导致 hbase 一直处于启动无法关闭的问题
  6. 常见排序算法_解释的算法-它们是什么以及常见的排序算法
  7. 线程协作--wait,notify:经典消费者生产者
  8. python对TXT文本内容进行读写。
  9. 密码生成 算法编程题
  10. 融合黄金正弦混合变异的自适应樽海鞘群算法
  11. IP 地址、网络号和主机号、ABC三类、ip地址可分配问题、子网掩码、子网划分
  12. 使用Draw免费在线作图
  13. 【计算机基础】计算机分类
  14. 使用L-Edit画环形光栅
  15. 阿里架构师的炫技与克制:代码的两种味道与态度
  16. python pickle文件大小_无法在Python中加载以前转储的大大小pickle文件
  17. 图像形态学(腐蚀、膨胀、开运算、闭运算、梯度、顶帽、黑帽)
  18. 2021.6~2022.6实习、秋招总结
  19. 概念辨析:dBm, dBi, dBd, dB, dBc,dBuV,dBuVemf
  20. 一秒批量导出PPT中的所有图片

热门文章

  1. Vs2015 mysql ef_VS2015 +EF6 连接MYSQL数据库生成实体
  2. 如果刘华强是个码农...
  3. Spring Boot 2.x基础教程:使用Elastic Job实现定时任务
  4. 音效摸鱼还不够爽?试试IDE里打几盘魂斗罗?
  5. gogs mysql 报错_linux上Docker安装gogs私服亲测(详解)
  6. php vsftpd文件上传类,php ftp文件上传函数(基础版)
  7. php抓取新浪微博数据抓取,php利用curl抓取新浪微博内容示例
  8. matlab配对交易回测,精品案例 | 经典投资策略之配对交易策略
  9. java多线程yield_Java多线程yield
  10. win10 编译姿态估计AlphaPose