问题发迹
最近在使用autoconfig-maven-plugin打包应用遇到一个异常:Nested JAR URLs are not supported。autoconfig GitHub传送门 autoconfig issue
跟踪代码后,发现JDK中一段代码的处理,如下图:
分析代码后,暂定认为是JDK(jdk1.8.0_231)中代码(117行)逻辑不严谨,后边继续跟进。
更新
开发环境更新了JDK的小版本号(jdk1.8.0_202)后,再看源码,checkNestedProtocol这个方法已经没有了。
就问题JDK代码分析来看:
String var10 = this.checkNestedProtocol(var2);
if(var10 !=null){
throw new NullPointerException(var10);
}
以上方法,目的在于匹配var是以“jar:”开头的字符串(URL)。意在表名不支持这种类型的URL。
读者可亲自调试代码至此,比对此处方法的参数,一探究竟!
最终回到问题
从异常信息调用栈可以看到,打包过程,试图根据一个URL获取一个jar,并进行打包(压缩)。但产生问题的JDK并不支持URL路径中包含“jar”。
根本解决问题的思路
①拿到autoconfig源码,自行修改,捕获到这种异常的处理,对jar文件不再进行压缩
已经有热心网友修复,小版本号:1.2-fixcompress-SNAPSHOT(这个版本的下载还是废了一番苦心呐)
配置阿里的镜像似乎下载不到这个版本的jar
终于还是在GitHub以关键字搜索1.2-fixcompress-SNAPSHOT找到了线索
按照阿里云的指导配置了私服
②换JDK(这个简单就不说了)