spring-boot-maven-plugin将所有“我的”类和第三方库打包在BOOT-INF / classes.com.my.package.MyClass.class
下这使得无法正常使用ClassPath.getTopLevelClasses("com.my.package")
找到它们。
我可以用ClassPath.getTopLevelClasses("BOOT-INF.classes.com.my.package")
找到它们,但是无法使用该名称实例化该类。
不幸的是,此程序包扫描发生在库中,而不是在我的代码中,因此我无法更改它。我唯一能做的就是配置在哪里搜索我的课程。
在BOOT-INF之外,有什么办法可以将我的类的spring-boot-maven-plugin包和它的类一起拥有?还是有其他解决方法?
答案 0 :(得分:0)
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));