get class in jar on Linux
Springboot ResourceLoader获取指定package目录下所有的类
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
String pattern = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX
+ ClassUtils.convertClassNameToResourcePath("org.yourpackage") + "/*.class";
// 以上代码可解析出当前工程所引用的jar包中的类
// 以下代码却不可以解析jar中的类,本地IDEA中测试没有问题,工程里直接引用的sub module, 但Linux上就找不着了
// Resource[] resources = resolver.getResources("classpath*:org\\yourpackage\\*.class");
Resource[] resources = resolver.getResources(pattern);
CachingMetadataReaderFactory readerFactory = new CachingMetadataReaderFactory();
// ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
for (Resource resource : resources) {
//全限定类名,完整路径
String className = readerFactory.getMetadataReader(resource).getClassMetadata().getClassName();
// Class<?> aClass = systemClassLoader.loadClass(className); //在linux上是出现找不到类的异常,并不是由这个ClassLoader加载的
Class<?> aClass = Class.forName(className);//直接使用Class.forName 即可加载出来
}
参考:
Can not load class in classpath when package a executable jar #4375
Spring boot ResourceLoader获取指定package目录下所有的类和方法
SpringBoot在window和linux都可以获取resource路径的方法