[英]spring-boot-maven-plugin created jar run by using classpath
[英]Finding classes with ClassPath.getTopLevelClasses() in jar packaged by spring-boot-maven-plugin
spring-boot-maven-plugin 將所有“我的”類和 3rd 方庫打包在 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 打包到我的類中? 或者有沒有其他方法可以解決這個問題?
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));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.