Closed johnyannj closed 5 years ago
可以尝试调试下,sun 相关的代码可以谷歌 download。fatjar 处理是spring boot 定义的特殊加载资源的方法,用法可能和普通的资源加载不一样,这个问题目前看来和 Ark 没什么关联,没有抓异常的必要。
有影响的场景:
有些开源软件,它为了兼容classpath和system file path。 习惯做法是会先getResource,看classpath下面有没有,如果没有,再当文件路径处理。
这种情况会报错。
有影响的场景:
有些开源软件,它为了兼容classpath和system file path。 习惯做法是会先getResource,看classpath下面有没有,如果没有,再当文件路径处理。
这种情况会报错。
麻烦尽量提供你提到的开源软件的复现 demo 哈
我先关闭这个 issue,如果有需求请重新代开。
URLClassloader 加载一个普通jar包的的url,获取一个特殊路径的resource,会返回null 举例:
在对fatJar支持以后, 使用URLClassloader加载嵌套jar包的url 然后getResource("C:\a.yaml"), 会报错, 举例:
下面是一个使用spring boot里的fatjar的支持的例子, sofa-ark的代码和spring-boot类似,应该现象是一致的:
我搜了下,overflow上面也有人遇到过 https://stackoverflow.com/questions/51203893/java-lang-illegalargumentexception-name
看代码已经进入sun的包了,很难调试,没再跟踪。
或者,是否可以考虑在下面这个位置把这个异常抓一下(或许又是馊主意)? com.alipay.sofa.ark.container.service.classloader.AbstractClasspathClassLoader#getLocalResource