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);
        }