Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在spring boot maven插件打包的jar中查找ClassPath.GetToLevel classes()的类_Java_Classpath_Spring Boot Maven Plugin - Fatal编程技术网

Java 在spring boot maven插件打包的jar中查找ClassPath.GetToLevel classes()的类

Java 在spring boot maven插件打包的jar中查找ClassPath.GetToLevel classes()的类,java,classpath,spring-boot-maven-plugin,Java,Classpath,Spring Boot Maven Plugin,SpringBootMaven插件将所有“我的”类和第三方库打包在boot-INF/classes.com.my.package.MyClass.class下 这使得使用正常工作的ClassPath.getTopLevelClasses(“com.my.package”)无法找到它们 我可以通过ClassPath.getTopLevelClasses(“BOOT-INF.classes.com.my.package”)找到它们,但该类不能用该名称实例化 不幸的是,这个包扫描发生在一个库中,而不是

SpringBootMaven插件将所有“我的”类和第三方库打包在boot-INF/classes.com.my.package.MyClass.class下

这使得使用正常工作的
ClassPath.getTopLevelClasses(“com.my.package”)
无法找到它们

我可以通过
ClassPath.getTopLevelClasses(“BOOT-INF.classes.com.my.package”)
找到它们,但该类不能用该名称实例化

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

有没有办法让SpringBootMaven插件在boot-INF之外将我的类和它自己的类一起打包?或者还有其他方法吗?

私有最终静态字符串TARGET\u PACKAGE=“com.my.PACKAGE”;
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));
私有最终字符串SPRING\u BOOT\u PREFIX=“BOOT-INF.classes。”; 私有集getClassInfo集(){ 试一试{ ClassLoader=Thread.currentThread().getContextClassLoader(); Set classinfo Set=ClassPath.from(loader).getToLevel类(TARGET\u包); if(classinfo集.isEmpty()){ classInfoSet=ClassPath.from(loader).getToLevel类(SPRING\u BOOT\u前缀+TARGET\u包); } 返回classinfo集; } 捕获(IOE异常){ 返回集合; } } 私有字符串getClassName(ClassInfo ClassInfo){ 字符串className=classInfo.getName(); if(className.contains(SPRING\u BOOT\u前缀)){ 返回StringUtils.substringAfterLast(类名,SPRING\u BOOT\u前缀); } 返回类名; } //你现在可以上课了 forName(getClassName(classInfo));
私有最终静态字符串TARGET\u PACKAGE=“com.my.PACKAGE”;
私有最终字符串SPRING\u BOOT\u PREFIX=“BOOT-INF.classes。”;
私有集getClassInfo集(){
试一试{
ClassLoader=Thread.currentThread().getContextClassLoader();
Set classinfo Set=ClassPath.from(loader).getToLevel类(TARGET\u包);
if(classinfo集.isEmpty()){
classInfoSet=ClassPath.from(loader).getToLevel类(SPRING\u BOOT\u前缀+TARGET\u包);
}
返回classinfo集;
}
捕获(IOE异常){
返回集合;
}
}
私有字符串getClassName(ClassInfo ClassInfo){
字符串className=classInfo.getName();
if(className.contains(SPRING\u BOOT\u前缀)){
返回StringUtils.substringAfterLast(类名,SPRING\u BOOT\u前缀);
}
返回类名;
}
//你现在可以上课了
forName(getClassName(classInfo));

欢迎使用StackOverflow,如果需要了解答案,请添加更多说明和代码,因为这将尽快解决其他人的问题。欢迎使用StackOverflow,如果需要了解答案,请添加更多说明和代码,因为这将尽快解决其他人的问题。