moon-util工具
使用monn-util工具包实现解析自定义表达式报错如下:java.nio.file.NoSuchFileException: com/moon/core
1.报错信息如下(太长了只截图了重要部分):
org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.ExceptionInInitializerError
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ExceptionInInitializerError: null
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:888)
at org.springframework.web.servlet.mc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
... 42 common frames omitted
Caused by: java.lang.IllegalStateException: java.nio.file.NoSuchFileException: com/moon/core
at com.moon.core.lang.ThrowUtil.runtime(ThrowUtil.java:128)
at com.moon.core.lang.PackageScanner.scanFromUrl(PackageScanner.java:65)
at com.moon.core.lang.PackageScanner.scanOf(PackageScanner.java:40)
at com.moon.core.lang.PackageScanner.scan(PackageScanner.java:29)
at com.moon.runner.core.IGetLoad.<clinit>(IGetLoad.java:28)
... 106 common frames omitted
Caused by: java.nio.file.NoSuchFileException: com/moon/core
at com.sun.nio.zipfs.ZipPath.getAttributes(ZipPath.java:666)
at com.sun.nio.zipfs.ZipFileSystemProvider.readAttributes(ZipFileSystemProvider.java:294)
at java.nio.file.Files.readAttributes(Files.java:1737)
at java.nio.file.FileTreeWalker.getAttributes(FileTreeWalker.java:219)
2.分析问题
2.1 首先我们看报错信息,是读取com/moon/core包的时候未找到文件,接着我们分析报错位置PackageScanner.scanFromUrl
重要的是下面这段代码:
看图中分为两块:
(1)项目里引用moon-util的包,然后把你的项目编译成jar运行,这时候图中的url.getPath()为
window: file:/F\\xxx\xxx\\你项目的jar!\BOOT-INF/\ib\moon-util-0.0.45.jar!/com/coom/core
linux: file:/usr/local/xxx/xxx/你项目的jar!\BOOT-INF/\ib\moon-util-0.0.45.jar!/com/coom/core
注意:BOOT-INF文件夹下的文件是受限制的 不能通过file去读取
经过图中标记位置的执行
window:F\\xxx\xxx\\你项目的jar
linux:usr/local/xxx/xxx/你项目的jar
接着往下运行的时候 他会去解析的路径下去找com/coom/core下的所有文件(看(2)就明白了为什么这个解析的地址不对),因为你项目里没有com/coom/core包所以报出异常
(2)直接在本地idea启动项目url.getPath()为file:/F\\xxx\xxx\maven\moon-util-0.0.45.jar!/com/coom/core
经过解析得出F\\xxx\xxx\maven\moon-util-0.0.45.jar 可以直接读取出jar里面的包
3.得出结论:
(1) jar方式运行 解析的地址不对
(2) jar方式运行 读取不到里面的monn-util-0.0.45.jar文件
4.解决问题
1.jar方式运行 解析的地址不对
String target = url.getPath().replaceFirst("file:/", "").replaceFirst("!.*", "");
改为
String target = url.getPath().substring(0,url.getPath().lastIndexOf("!"));(这里的地址要用到urlConnection读取BOOT-INF下的jar)
2.jar方式运行 读取不到里面的monn-util-0.0.45.jar文件
List<String> resultClassPaths = new ArrayList<>();// 这里的list看源码得知 这块的逻辑主要是读取moon-util下的com/coom/core下的所有类的路径返回
URL jarUrl = new URL(jar, null, 0, target);
URLConnection jarConn = jarUrl.openConnection();
if (jarConn instanceof JarURLConnection) {JarURLConnection result = (JarURLConnection) jarConn;JarInputStream jarInputStream = new JarInputStream(result.getInputStream());JarEntry entry;while ((entry = jarInputStream.getNextJarEntry()) != null) {if(entry.getName().contains(packageName) && entry.getName().contains(DOT_CLASS)){resultClassPaths.add(entry.getName().replace(DOT_CLASS,"").replace('/', '.'));}}
}
总结:
主要修改的部分就是针对于地址的截取,跟jar方式部署读取jar包内BOOT-INF下的文件的方式。
moon-util工具相关推荐
- 不要再自己封装各种Util工具类了,这款神仙级框架你值得拥有!
点击关注公众号,Java干货及时送达 来源:ryanc.cc/archives/hutool-java-tools-lib 作者:Ryan Wang 简介 Hutool 谐音 "糊涂&quo ...
- 不要再封装各种Util工具类了,这个神级框架值得拥有!
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! Hutool 谐音 "糊涂",寓意追求 ...
- 封装时间转换工具类_推荐一款封装各种Util工具类,这款神仙级框架你值得拥有!...
点击上方 "Java指南者"关注, 星标或置顶一起成长 免费送 1024GB 精品学习资源 来源:ryanc.cc/archives/hutool-java-tools-lib 简 ...
- 还在封装各种 Util 工具类?这个神级框架帮你解决所有问题!
来源 | 网络 Hutool 谐音 "糊涂",寓意追求 "万事都作糊涂观,无所谓失,无所谓得" 的境界. Hutool 是一个 Java 工具包,也只是一个工具 ...
- 加密封装 怎么把_不要再封装各种Util工具类了,这个神级框架值得拥有!
Hutool 谐音 "糊涂",寓意追求 "万事都作糊涂观,无所谓失,无所谓得" 的境界. Hutool 是一个 Java 工具包,也只是一个工具包,它帮助我们简 ...
- httpurlconnection 封装_不要再封装各种Util工具类了,看看这个框架
不要再封装各种Util工具类了,看看这个框架 Hutool 谐音 "糊涂",寓意追求 "万事都作糊涂观,无所谓失,无所谓得" 的境界. Hutool 是一 ...
- java.util —— 工具类
工具类的存在,是为了平衡,Java 彻底的面向对象(everything is object. 的极端:),也即并非所有的东西都可抽象为类的,但又要有类的形式,工具类便由此诞生. 工具类不做实例化,工 ...
- java.util工具类之Currency类
JDK8在线Api中文手册 JDK8在线Api英文手册 Currency 类 Currency类封装了有关货币的信息,没有定义构造函数.表1列出了Currency类支持的方法.下面的程序演示了Curr ...
- c oracle 分页工具类,Util工具类 跨Oracle、MySQL通用分页查询
/**** 跨Oracle.MySQL通用分页查询*/public classPagingUtil { public static finalString MYSQL= "MYSQL&quo ...
- RSA对称加密 Util工具类
证书Key直接去换行符存放到就可以更方便,如果需要做安全的话可以把字段放到so层比较好 public class RSAUtil {public static final String KEY_ALG ...
最新文章
- [微信小程序]单选框以及多选框实例代码附讲解
- caffe中在某一层获得迭代次数的方法以及caffe编译时报错 error: ‘to_string‘ is not a member of ‘std‘解决方法
- linux cpu %us,Linux top里面%CPU和us%的解释
- C++ STL : 模拟实现STL中的容器适配器priority_queue
- Drools 6.2.0.Final发布
- spring AOP自定义注解方式实现日志管理
- 【Tensorflow】深度学习实战04——Tensorflow实现VGGNet
- 《超级女声》新增 9月4日 娱乐无极限 回顾超女专辑(都是超女) [共39G的精品]
- Java 清除指定目录文件夹下文件
- 处理团队中的消极情绪
- 车载以太网测试知识点
- 03uec++多人游戏【拥有莱福武器】
- matlab保存所有图,Matlab中图片保存的5种方法
- css 按钮扩散效果,专治按钮效果不明显(扩散动画效果)
- weblogic密码破解
- Web Frameworks for Python
- /dev/random和/dev/urandom
- 复试后,欢迎去【王道论坛】分享考研经验
- 机器人工程的工作与考研之困惑“要求越来越高”
- AutoSAR中的缩写(持续完善)