如下
import org.springframework.util.AntPathMatcher;import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;/*** generate reflection-config.json for native-image* @author cjbi*/
public class ReflectionConfigGenerator {public static void main(String[] args) throws Exception {String[] patterns = {"tech.wetech.metacode.application.dto.*","tech.wetech.metacode.domain.**.model.*","tech.wetech.metacode.domain.**.event.*","tech.wetech.metacode.infrastructure.jackson.JacksonUtils","tech.wetech.metacode.application.dto.SessionDataDTO","tech.wetech.metacode.infrastructure.jackson.BaseEntitySerializer","tech.wetech.metacode.infrastructure.jsonlogic.JsonLogicUtils","tech.wetech.metacode.infrastructure.pinyin4j.Pinyin4jUtil","tech.wetech.metacode.infrastructure.cache.NotABeanKeyGen"};ReflectionConfigGenerator generator = new ReflectionConfigGenerator();generator.generateAndPrintConsole(patterns);}private void generateAndPrintConsole(String... patterns) throws Exception {List<File> classsFileList = getClasssFileList();AntPathMatcher antPathMatcher = new AntPathMatcher();StringBuilder sb = new StringBuilder("[");for (File file : classsFileList) {String classPath = ReflectionConfigGenerator.class.getClassLoader().getResource("").getFile().replaceFirst("/", "").replace("/", "\\");String className = file.getPath().replace(classPath, "").replace("\\", ".").replaceAll(".class", "");for (String pattern : patterns) {if (antPathMatcher.match(pattern, className)) {sb.append(String.format("""{"name" : "%s","allDeclaredConstructors" : true,"allPublicConstructors" : true,"allDeclaredMethods" : true,"allPublicMethods" : true,"allDeclaredFields" : true,"allPublicFields" : true},""", className));}}}sb.deleteCharAt(sb.length() - 1);sb.append("]");System.out.println(sb);}private List<File> getClasssFileList() throws URISyntaxException, IOException {ClassLoader classLoader = Thread.currentThread().getContextClassLoader();Enumeration<URL> urls = classLoader.getResources("");List<File> fileList = new ArrayList<>();while (urls.hasMoreElements()) {URL url = urls.nextElement();if (url.getProtocol().equals("file")) {File file = new File(url.toURI());listFiles(file, fileList);}}return fileList;}private void listFiles(File rootFile, List<File> classFiles) {File[] files = rootFile.listFiles();assert files != null;for (File file : files) {if (file.isFile() && file.getName().endsWith(".class")) {classFiles.add(file);} else if (file.isDirectory()) {listFiles(file, classFiles);}}}
}