使用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工具相关推荐

  1. 不要再自己封装各种Util工具类了,这款神仙级框架你值得拥有!

    点击关注公众号,Java干货及时送达 来源:ryanc.cc/archives/hutool-java-tools-lib 作者:Ryan Wang 简介 Hutool 谐音 "糊涂&quo ...

  2. 不要再封装各种Util工具类了,这个神级框架值得拥有!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! Hutool 谐音 "糊涂",寓意追求 ...

  3. 封装时间转换工具类_推荐一款封装各种Util工具类,这款神仙级框架你值得拥有!...

    点击上方 "Java指南者"关注, 星标或置顶一起成长 免费送 1024GB 精品学习资源 来源:ryanc.cc/archives/hutool-java-tools-lib 简 ...

  4. 还在封装各种 Util 工具类?这个神级框架帮你解决所有问题!

    来源 | 网络 Hutool 谐音 "糊涂",寓意追求 "万事都作糊涂观,无所谓失,无所谓得" 的境界. Hutool 是一个 Java 工具包,也只是一个工具 ...

  5. 加密封装 怎么把_不要再封装各种Util工具类了,这个神级框架值得拥有!

    Hutool 谐音 "糊涂",寓意追求 "万事都作糊涂观,无所谓失,无所谓得" 的境界. Hutool 是一个 Java 工具包,也只是一个工具包,它帮助我们简 ...

  6. httpurlconnection 封装_不要再封装各种Util工具类了,看看这个框架

    不要再封装各种Util工具类了,看看这个框架 Hutool 谐音 "糊涂",寓意追求 "万事都作糊涂观,无所谓失,无所谓得" 的境界.    Hutool 是一 ...

  7. java.util —— 工具类

    工具类的存在,是为了平衡,Java 彻底的面向对象(everything is object. 的极端:),也即并非所有的东西都可抽象为类的,但又要有类的形式,工具类便由此诞生. 工具类不做实例化,工 ...

  8. java.util工具类之Currency类

    JDK8在线Api中文手册 JDK8在线Api英文手册 Currency 类 Currency类封装了有关货币的信息,没有定义构造函数.表1列出了Currency类支持的方法.下面的程序演示了Curr ...

  9. c oracle 分页工具类,Util工具类 跨Oracle、MySQL通用分页查询

    /**** 跨Oracle.MySQL通用分页查询*/public classPagingUtil { public static finalString MYSQL= "MYSQL&quo ...

  10. RSA对称加密 Util工具类

    证书Key直接去换行符存放到就可以更方便,如果需要做安全的话可以把字段放到so层比较好 public class RSAUtil {public static final String KEY_ALG ...

最新文章

  1. [微信小程序]单选框以及多选框实例代码附讲解
  2. caffe中在某一层获得迭代次数的方法以及caffe编译时报错 error: ‘to_string‘ is not a member of ‘std‘解决方法
  3. linux cpu %us,Linux top里面%CPU和us%的解释
  4. C++ STL : 模拟实现STL中的容器适配器priority_queue
  5. Drools 6.2.0.Final发布
  6. spring AOP自定义注解方式实现日志管理
  7. 【Tensorflow】深度学习实战04——Tensorflow实现VGGNet
  8. 《超级女声》新增 9月4日 娱乐无极限 回顾超女专辑(都是超女) [共39G的精品]
  9. Java 清除指定目录文件夹下文件
  10. 处理团队中的消极情绪
  11. 车载以太网测试知识点
  12. 03uec++多人游戏【拥有莱福武器】
  13. matlab保存所有图,Matlab中图片保存的5种方法
  14. css 按钮扩散效果,专治按钮效果不明显(扩散动画效果)
  15. weblogic密码破解
  16. Web Frameworks for Python
  17. /dev/random和/dev/urandom
  18. 复试后,欢迎去【王道论坛】分享考研经验
  19. 机器人工程的工作与考研之困惑“要求越来越高”
  20. AutoSAR中的缩写(持续完善)

热门文章

  1. 不同坐标系数据切片统一方法
  2. 计算机专业的英文介绍,计算机专业英文自我介绍
  3. 1000以内的回文数_从回文诗到回文数
  4. 动态脑电图(Ambulatory EEG)及其工作过程、数据处理!
  5. TED | 怎样成为一个自律的人
  6. oracleundo表空间概述_34_undo表空间概述
  7. Python - 归一化与反归一化
  8. 笔记本电脑win10截图软件推荐
  9. OCR文档识别——数据录入工厂
  10. 基于队列数据的RR及其95%CI计算