DaTaX当成jar包当作第三方库启动的相关问题
上一篇已经大致的将了本地状况下DaTaX的纯Java代码启动的过程
http://www.cnblogs.com/blogsofmy/p/8287637.html不了解的请点超链接
这次我们来说说文件被打成jar包之后的路径问题
上一篇中因为全是本地文件,所以就算是用绝对路径也不会出问题,但是当文件被打成jar包之后,问题就暴露出来了,这个jar包会处于什么位置完全不确定,
那么 我们应该怎么来获取该项目的运行路径呢,怎么来正确的加载资源呢。
先看看如何来加载某一处的资源
public static String DATAX_CONF_PATH = System.getProperty("core","classpath:conf/core.json");
我们的静态环境变量可以先通过
System.getProperty()来加载jvm已经定义好了的变量
我们来可看看源码
public static String getProperty(String key, String def) {
checkKey(key);
SecurityManager sm = getSecurityManager();
if (sm != null) {
sm.checkPropertyAccess(key);
}
return props.getProperty(key, def);
}
首先判断key的值是null还是空,如果都不是则正常运行
然后用安全加载起加载jvm中已经第一好的值,然后sm不为空,则根据key找到value
如果是空,直接返回默认值def 我们的是
classpath:conf/core.json
ok 继续执行
private static Configuration parseCoreConfig(final String path) {
//相对路径 classpath:/conf/core.json
if (path.startsWith("classpath:")) {
// /conf/core.json
String realPath = StringUtils.substringAfter(path, "classpath:");
Configuration from = Configuration
.from(ClassLoader.getSystemResourceAsStream(realPath));
System.out.println(ClassLoader.getSystemResource(realPath));
return from;
} else {
//绝对路径
return Configuration.from(new File(path));
}
}
完整代码如上 我们来解析一下
如果路径以classpath:开头 那么说明是我们刚才第一好了的默认值
利用
StringUtils.substringAfter(path, "classpath:");
来进行切分路径
现在我们只剩下了一个相对路径 ,重点来了
ClassLoader.getSystemResource(realPath)
就是这一句代码 diao炸天有没有,可以根据相对路径来获取到绝对路径 。 这个是某个写底层的程序猿已经帮我们把过程写好了。
这个涉及的有点多了,就先不分析了。
日后再说。
如果执行
System.out.println(ClassLoader.getSystemResource(realPath));
上面这一句可以发现 。我们的路径还是多了点东西
这段代码执行完成之后是这样的
file:绝对路径
多了个file:呀
不过没关系,我们可以来进行切割
public static String DATAX_HOME =StringUtils.substringBefore(
ClassLoader.getSystemResource(
StringUtils.substringAfter(DATAX_CONF_PATH, "classpath:")).getPath(),
"/core/t");
我们里面涉及到前切,后切和类型转换,看不懂就百度关键字吧
ok 我们得到了什么 !!!!
动态的 DATAX_HOME
没错,现在文件无论怎么打包都没问题了,我们都可以直接调用。先说到这吧。
DaTaX当成jar包当作第三方库启动的相关问题的更多相关文章
- Android Studio 简介及导入 jar 包和第三方开源库方[转]
原文:http://blog.sina.com.cn/s/blog_693301190102v6au.html Android Studio 简介 几天前的晚上突然又想使用 Android Studi ...
- 【转载】JAVA SpringBoot 项目打成jar包供第三方引用自动配置(Spring发现)解决方案
JAVA SpringBoot 项目打成jar包供第三方引用自动配置(Spring发现)解决方案 本文为转载,原文地址为:https://www.cnblogs.com/adversary/p/103 ...
- Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参
Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参 一.打包 情况1:不需要向程序传参数,并且程序没有使用第三方jar包 Eclipse上导出jar: 然后选择一个java文件作为入 ...
- spring boot开发,jar包一个一个来启动太麻烦了,写一个bat文件一键启动
spring boot开发,jar包一个一个来启动太麻烦了,写一个bat文件一键启动 @echo offcd D:\workProject\bushustart cmd /c "title ...
- Android实战技巧之十二:Android Studio导入第三方类库、jar包和so库
第三方类库源码 将一网友的XMPP代码从ADT转到AS时,发现其使用了第三方类库,源码放在了lib下,直接在AS中Import project,第三方类库并没有自动导入进来,看来需要自己动手了. 项目 ...
- Android Studio 1.1 使用介绍及导入 jar 包和第三方依赖库
导入 jar 包 导入 jar 包的方式非常简单,就是在项目中的 libs 中放入你需要导入的 jar 包,然后右键你的 jar 文件,选择“add as a library”即可在你的项目中使用这个 ...
- JAVA SpringBoot 项目打成jar包供第三方引用自动配置(Spring发现)解决方案
本项目测试环境 JDK: 1.8 SpringBoot: 2.1 需求描述 当我们想要利用SpringBoot封装一套组件并发布给第三方使用时,我们就不得不考虑我们的组件能否被使用者正确引入使用,此处 ...
- 【转】Android将Activity打成jar包供第三方调用(解决资源文件不能打包的问题)
Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法) 鼠标右键项目,然后属性,然后java buildpath 然后order and ex ...
- Maven使用deploy上传jar包到远程库
一.环境准备 首先需要在本地环境安装好maven,并且在环境变量配置好 二.配置远程库认证 需要在./conf/setting.xml(maven的配置文件,不要弄错)中配置需要远程上传库的地址,用户 ...
随机推荐
- bzoj 2073 暴力
2073: [POI2004]PRZ Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 442 Solved: 327[Submit][Status][D ...
- linux中权限对文件和目录的作用
chmod 755 a.txt 文件: r:读取文件内容(cat more head tail) w:编辑,新增,修改文件的内容(vi,echo) 不包括删除文件:原因是只能对文件内容进行修改,而在l ...
- mybatis 3.x源码深度解析与最佳实践(最完整原创)
mybatis 3.x源码深度解析与最佳实践 1 环境准备 1.1 mybatis介绍以及框架源码的学习目标 1.2 本系列源码解析的方式 1.3 环境搭建 1.4 从Hello World开始 2 ...
- 分布式mysql中间件(mycat)
1. MyCAT概述 1.1 背景 随着传统的数据库技术日趋成熟.计算机网络技术的飞速发展和应用范围的扩充,数据库应用已经普遍建立于计算机网络之上.这时集中式数据库系统表现出它的不足: (1)集中 ...
- BIOS中的UEFI和Legacy启动模式
BIOS即Basic Input/Output System,翻成中文是"基本输入/输出系统",是一种所谓的"固件",负责在开机时做硬件启动和检测等工作,并且担 ...
- IBM Rational AppScan:跨站点脚本攻击深入解析
IBM Rational AppScan:跨站点脚本攻击深入解析 了解黑客如何启动跨站点脚本攻击(cross-site scripting,XSS),该攻击危害(及不危害)什么,如何检测它们,以 ...
- freemarker基本数据类型
freemarker基本数据类型 1.基本数据类型 (1)字符串 (2)数字 (3)布尔值 (4)日期 2.展示示例 <html> <head> <meta http-e ...
- RHEL64 缺少ISO 9660图像 安装程序试图挂载映像#1,在硬盘上无法找到该映像
用光盘安装Linux,很容易,按照提示一步一步就好.如果没有光驱,只好想办法用硬盘或者U盘安装了. 首先说说怎样用U盘启动Linux的安装程序:1.将ISO镜像文件拷贝到U盘中,并解压到U盘根目录.将 ...
- 芝麻HTTP:PhantomJS的安装
PhantomJS是一个无界面的.可脚本编程的WebKit浏览器引擎,它原生支持多种Web标准:DOM操作.CSS选择器.JSON.Canvas以及SVG. Selenium支持PhantomJS,这 ...
- I Hate It HDU - 1754
很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当然,老师有 ...