Reflections in Spring boot Executable Jar - grant-guo/Ideas GitHub Wiki
spring-boot-loader has its own executable jar format, refer to here: https://docs.spring.io/spring-boot/docs/current/reference/html/executable-jar.html
in this format, the normal java reflections don't work, especially with the reflection library(https://github.com/ronmamo/reflections)
here is how to get annotations for example:
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(Thread.currentThread().getContextClassLoader());
try {
String annotationClassname = ${some_annotation}.class.getName();
String pattern = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX
+ ClassUtils.convertClassNameToResourcePath(${package}) + "/*.class";
Resource[] resources = resolver.getResources(pattern);
CachingMetadataReaderFactory factory = new CachingMetadataReaderFactory();
Arrays.stream(resources).forEach(resource -> {
try {
MetadataReader reader = factory.getMetadataReader(resource);
if (reader.getAnnotationMetadata().isAnnotated(annotationClassname)) {
String annotationValue = reader.getAnnotationMetadata().getAnnotationAttributes(annotationClassname).get("value").toString();
...
}
} catch (IOException e) {
logger.warn("Extract annotation wrong: {}", e);
}
});
} catch (IOException e) {
logger.warn("Morphline commands path is wrong: {}", e);
}