gpt4 book ai didi

java - 在 spring-boot-maven-plugin 打包的 jar 中使用 ClassPath.getTopLevelClasses() 查找类

转载 作者:行者123 更新时间:2023-12-02 05:27:36 24 4
gpt4 key购买 nike

spring-boot-maven-plugin 将所有“我的”类和第 3 方库打包在 BOOT-INF/classes.com.my.package.MyClass.class 下

这使得无法正常使用 ClassPath.getTopLevelClasses("com.my.package") 找到它们。

我可以使用 ClassPath.getTopLevelClasses("BOOT-INF.classes.com.my.package") 找到它们,但该类无法使用该名称实例化。

不幸的是,这个包扫描发生在库中而不是在我的代码中,所以我无法更改它。我唯一能做的就是配置在哪里搜索我的类(class)。

有没有办法让 spring-boot-maven-plugin 将我的类与其自己的类一起打包到 BOOT-INF 之外?或者还有其他办法解决这个问题吗?

最佳答案

private final static String TARGET_PACKAGE = "com.my.package";
private final String SPRING_BOOT_PREFIX = "BOOT-INF.classes.";

private Set<ClassInfo> getClassInfoSet() {
try {
ClassLoader loader = Thread.currentThread().getContextClassLoader();
Set<ClassInfo> classInfoSet = ClassPath.from(loader).getTopLevelClasses(TARGET_PACKAGE);
if (classInfoSet.isEmpty()) {
classInfoSet = ClassPath.from(loader).getTopLevelClasses(SPRING_BOOT_PREFIX + TARGET_PACKAGE);
}
return classInfoSet;
}
catch (IOException e) {
return Collections.emptySet();
}
}

private String getClassName(ClassInfo classInfo) {
String className = classInfo.getName();
if (className.contains(SPRING_BOOT_PREFIX)) {
return StringUtils.substringAfterLast(className, SPRING_BOOT_PREFIX);
}
return className;
}

// you can get the Class now
Class.forName(getClassName(classInfo));

关于java - 在 spring-boot-maven-plugin 打包的 jar 中使用 ClassPath.getTopLevelClasses() 查找类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56219456/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com