上一篇已经大致的将了本地状况下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. bzoj 2073 暴力

    2073: [POI2004]PRZ Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 442  Solved: 327[Submit][Status][D ...

  2. linux中权限对文件和目录的作用

    chmod 755 a.txt 文件: r:读取文件内容(cat more head tail) w:编辑,新增,修改文件的内容(vi,echo) 不包括删除文件:原因是只能对文件内容进行修改,而在l ...

  3. mybatis 3.x源码深度解析与最佳实践(最完整原创)

    mybatis 3.x源码深度解析与最佳实践 1 环境准备 1.1 mybatis介绍以及框架源码的学习目标 1.2 本系列源码解析的方式 1.3 环境搭建 1.4 从Hello World开始 2 ...

  4. 分布式mysql中间件(mycat)

    1.   MyCAT概述 1.1 背景 随着传统的数据库技术日趋成熟.计算机网络技术的飞速发展和应用范围的扩充,数据库应用已经普遍建立于计算机网络之上.这时集中式数据库系统表现出它的不足: (1)集中 ...

  5. BIOS中的UEFI和Legacy启动模式

    BIOS即Basic Input/Output System,翻成中文是"基本输入/输出系统",是一种所谓的"固件",负责在开机时做硬件启动和检测等工作,并且担 ...

  6. IBM Rational AppScan:跨站点脚本攻击深入解析

    IBM Rational AppScan:跨站点脚本攻击深入解析    了解黑客如何启动跨站点脚本攻击(cross-site scripting,XSS),该攻击危害(及不危害)什么,如何检测它们,以 ...

  7. freemarker基本数据类型

    freemarker基本数据类型 1.基本数据类型 (1)字符串 (2)数字 (3)布尔值 (4)日期 2.展示示例 <html> <head> <meta http-e ...

  8. RHEL64 缺少ISO 9660图像 安装程序试图挂载映像#1,在硬盘上无法找到该映像

    用光盘安装Linux,很容易,按照提示一步一步就好.如果没有光驱,只好想办法用硬盘或者U盘安装了. 首先说说怎样用U盘启动Linux的安装程序:1.将ISO镜像文件拷贝到U盘中,并解压到U盘根目录.将 ...

  9. 芝麻HTTP:PhantomJS的安装

    PhantomJS是一个无界面的.可脚本编程的WebKit浏览器引擎,它原生支持多种Web标准:DOM操作.CSS选择器.JSON.Canvas以及SVG. Selenium支持PhantomJS,这 ...

  10. I Hate It HDU - 1754

    很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当然,老师有 ...