最近做了一个动态加载外部jar包,最终使用的类加载器是sun.misc.Launcher$AppClassLoader,这些类中依赖的一些class在工程中本来就存在,使用的是LaunchedURLClassLoader 。 这两个加载器都是URLClassLoader的子类,问题是外部jar需要的类显然无法从LaunchedURLClassLoader中获取,一直报错“java.lang.ClassNotFoundException”。在ide中运行正常,使用的都是sun.misc.Launcher$AppClassLoader。 有什么方法能指定类加载器为LaunchedURLClassLoader吗?这个是springboot打jar包后才有的,项目中并不存在
解决方案 »
- 求帮忙看看这个HQL语句该怎么写
- Lucene 过滤器 如何过滤得分较低的文档。
- org.apache.jasper.JasperException: PWC6033: Error in Javac compilation for JSP
- 如何获取一个txt文件内容,不是二进制数据?
- ofbiz框架的错误提示信息
- 求思路webservice管理多个配置文件
- 请问大家在jsp中实现数据表格有什么好的标签
- 100分求jbuilder2005+jboss+mysql开发EJB的范例!
- tomcat5.5热部署问题
- hibernate 菜鸟问题
- redisTemplate存取对象问题
- 用PDFBox把上传的PDF文件转成图片在action里面报错
问题就在这里了,“java.class.path”为应用运行的环境路径,传统应用是jre环境及应用路径,但是springboot 则为jar路径。
sun.misc.Launcher$AppClassLoader 显然不会去加载jar中的jar包。即springboot应用中的lib包下面的jar由其自定义的LaunchedURLClassLoader来完成加载。这样在使用AppClassLoader来加载外部类,其中引用了lib下的类,它是无法找到下级ClassLoader中的类的,也就是java.lang.ClassNotFoundException”