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的配置文件,不要弄错)中配置需要远程上传库的地址,用户 ...
随机推荐
- Ajax疯狂讲义
Ajax: async javascript and xml 异步的JS和XML AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这 ...
- java-redis集合数据操作示例(三)
redis系列博文,redis连接管理类的代码请跳转查看<java-redis字符类数据操作示例(一)>. 一.集合类型缓存测试类 public class SetTest { /** * ...
- 高可用之KeepAlived(2):keepalived+lvs
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- tcp/ip 卷一 读书笔记(5)arp和rarp 同网段和不同网段之间的通信过程
arp和rarp 同网段和不同网段之间的通信过程 IPv6中已经没有arp rarp协议,所以这里都是IPv4. 链路层使用以太网地址来确定目的地址,应用则常使用ip地址通信 arp协议是指从ip地址 ...
- linux dhcp搭建及pxe无人值守装机
DHCP动态主机配置协议:由IETF组织制定,用来简化主机ip地址分配管理可以自动分配的入网参数ip地址/子网掩码/广播地址默认网关地址DNS服务器地址 ----------------------- ...
- 笔记︱信用风险模型(申请评分、行为评分)与数据准备(违约期限、WOE转化)
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 巴塞尔协议定义了金融风险类型:市场风险.作业风 ...
- mysql学习笔记03 mysql数据类型
数值型:整数型 小数型字符串型时间和日期类型 数值型①整数型1 2 3 4 81bin表示1位,1Byte表示一个字节1B=8b.1汉字=2字节(1 word = 2 byte)1字节=8位(1 by ...
- LINQ 按多个字段排序(orderby、thenby、Take)
LINQ 按多个字段排序(orderby.thenby.Take) orderby 子句解析为 OrderBy()方法,orderby descending 子句解析为OrderBy Descend ...
- IOS开发之XCode学习008:UIViewController基础
此文学习来源为:http://study.163.com/course/introduction/1002858003.htm 红色框选部分用A代替,AppDelegate类在程序框架启动时,如果在i ...
- hihocoder1388 Periodic Signal
FFT 就可以了 比赛时候没时间做了 #include<bits/stdc++.h> using namespace std; typedef long long ll; const in ...