上一篇已经大致的将了本地状况下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包当作第三方库启动的相关问题的更多相关文章

  1. Android Studio 简介及导入 jar 包和第三方开源库方[转]

    原文:http://blog.sina.com.cn/s/blog_693301190102v6au.html Android Studio 简介 几天前的晚上突然又想使用 Android Studi ...

  2. 【转载】JAVA SpringBoot 项目打成jar包供第三方引用自动配置(Spring发现)解决方案

    JAVA SpringBoot 项目打成jar包供第三方引用自动配置(Spring发现)解决方案 本文为转载,原文地址为:https://www.cnblogs.com/adversary/p/103 ...

  3. Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参

    Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参 一.打包 情况1:不需要向程序传参数,并且程序没有使用第三方jar包 Eclipse上导出jar: 然后选择一个java文件作为入 ...

  4. spring boot开发,jar包一个一个来启动太麻烦了,写一个bat文件一键启动

    spring boot开发,jar包一个一个来启动太麻烦了,写一个bat文件一键启动 @echo offcd D:\workProject\bushustart cmd /c "title ...

  5. Android实战技巧之十二:Android Studio导入第三方类库、jar包和so库

    第三方类库源码 将一网友的XMPP代码从ADT转到AS时,发现其使用了第三方类库,源码放在了lib下,直接在AS中Import project,第三方类库并没有自动导入进来,看来需要自己动手了. 项目 ...

  6. Android Studio 1.1 使用介绍及导入 jar 包和第三方依赖库

    导入 jar 包 导入 jar 包的方式非常简单,就是在项目中的 libs 中放入你需要导入的 jar 包,然后右键你的 jar 文件,选择“add as a library”即可在你的项目中使用这个 ...

  7. JAVA SpringBoot 项目打成jar包供第三方引用自动配置(Spring发现)解决方案

    本项目测试环境 JDK: 1.8 SpringBoot: 2.1 需求描述 当我们想要利用SpringBoot封装一套组件并发布给第三方使用时,我们就不得不考虑我们的组件能否被使用者正确引入使用,此处 ...

  8. 【转】Android将Activity打成jar包供第三方调用(解决资源文件不能打包的问题)

    Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法) 鼠标右键项目,然后属性,然后java buildpath 然后order and ex ...

  9. Maven使用deploy上传jar包到远程库

    一.环境准备 首先需要在本地环境安装好maven,并且在环境变量配置好 二.配置远程库认证 需要在./conf/setting.xml(maven的配置文件,不要弄错)中配置需要远程上传库的地址,用户 ...

随机推荐

  1. JavaScript 历史漫谈

    话说 JavaScript 其实是诞生在一个特殊的时期,20世纪90年代,正值第三次科技革命时期,互联网刚开始进入人们的生活.设想一下,在网速只有几十比特的那个时代,在登录注册时要花上很长一段时间等待 ...

  2. STL源码剖析之序列式容器

    最近由于找工作需要,准备深入学习一下STL源码,我看的是侯捷所著的<STL源码剖析>.之所以看这本书主要是由于我过去曾经接触过一些台湾人,我一直觉得台湾人非常不错(这里不涉及任何政治,仅限 ...

  3. jstl c标签 ”test does not support runtime expressions“

    将jstl 的uri <%@ taglib prefix="c" uri="http://Java.sun.com/jstl/core" %>(没有 ...

  4. 在windows上安装nginx

    在windows上安装nginx   最近自己也尝试了一下在windows上安装nginx,其实非常的简单,这里算是备忘一下.   首先需要到nginx的官网上下载最新版的nginx:http://n ...

  5. UVA 10534最长上升子序列运用

    在给定序列中寻找一个1~n+1递增,n~2n+1递减的序列,我的想法是直接对原序列和原序列的反序列用nlgn算法求递增序列,例如序列a[]={1,2,4,1,2,6},它的反序列为b[]={6,2,1 ...

  6. docker mysql 主从复制

    当然首先 docker pull mysql mkdir /usr/local/mysqlData/master/cnf mkdir /usr/local/mysqlData/master/data ...

  7. SpringBoot idea maven打包war

    什么都不需要配置,跟着做! pom.xml修改打包类型为war <packaging>war</packaging> 排除内置Tomcat <!--因配置外部TOMCAT ...

  8. 【开源】C#.NET股票历史数据采集,【附18年历史数据和源代码】

    如果用知乎,可以关注专栏:.NET开源项目和PowerBI社区 重点重点:我没有买股票,没有买股票,股市是个坑,小心割韭菜哦. 本文的初衷是数据分析(分析结果就不说了,就是想看看筛选点数据),只不过搞 ...

  9. Luogu P1522 牛的旅行 Cow Tours

    题目描述 农民 John的农场里有很多牧区.有的路径连接一些特定的牧区.一片所有连通的牧区称为一个牧场.但是就目前而言,你能看到至少有两个牧区通过任何路径都不连通.这样,Farmer John就有多个 ...

  10. 决策树学习笔记(Decision Tree)

    什么是决策树? 决策树是一种基本的分类与回归方法.其主要有点事模型具有可得性,分类速度快.学习时,利用训练数据,根据损失函数最小化原则建立决策树模型:预测时,对新数据,利用决策树模型进行分类. 决策树 ...