我需要读一个Spring Boot jar并加载ClassLoader上的所有clases .
我的问题,在spring引导类中位于“/ BOOT-INF / classes”目录而不是根目录 .
有谁知道如何在我的ClassLoader中加载这些类?
我试着这样做:
private URLClassLoader getURLClassLoaderFromJar(Path jarPath) throws MalformedURLException {
return URLClassLoader
.newInstance(new URL[] { new URL("jar:file:" + jarPath.toAbsolutePath().toString() + "!/") });
}
这加载jar,但没有类/ BOOT-INF / classes中的类
2 回答
我最后在一个临时目录中选择了解压缩de jar并使用以下条目创建一个URLClassloader:一个到根目录 . 一个到BOOT-INF / classes,一个用于BOOT-INT / lib中的每个jar
调查一下spring boot如何加载第三方(Liquibase)类,我会这样:
鉴于您知道要加载的包名称
也可以使用带有加载jar的类加载器:
findAllClasses("com.package", getURLClassLoaderFromJar(pathToJar));
此变体可以安全地与Spring Boot打包的可执行JAR一起使用