【问题标题】:Spring boot does not find new classesSpring Boot 找不到新类
【发布时间】:2022-01-02 16:44:05
【问题描述】:

我有一个 Spring Boot 应用程序,并带有一个控制器类、一个模型类等。每当我想添加任何新类时,我们就说模型类。我可以在 IDE 中找到它并在其他类中导入它。但是当我构建应用程序时,我收到编译错误,提示找不到该类。

我已尝试清理项目、使缓存无效并重新启动等等。当我查看 bin 文件夹时,那里缺少我的新模型类。所以由于某种原因,它没有被添加到那里。它是一个带有 Gradle 的 Spring Boot 应用程序。我会很感激任何帮助,因为我是 Spring Boot 的新手,我必须维护这个项目。

java.lang.IllegalStateException: Unable to load cache item
        at org.springframework.cglib.core.internal.LoadingCache.createEntry(LoadingCache.java:79) ~[spring-core-5.3.13.jar:5.3.13]
        at org.springframework.cglib.core.internal.LoadingCache.get(LoadingCache.java:34) ~[spring-core-5.3.13.jar:5.3.13]
        at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData.get(AbstractClassGenerator.java:134) ~[spring-core-5.3.13.jar:5.3.13]
        at org.springframework.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:319) ~[spring-core-5.3.13.jar:5.3.13]
        at org.springframework.cglib.proxy.Enhancer.createHelper(Enhancer.java:572) ~[spring-core-5.3.13.jar:5.3.13]
        at org.springframework.cglib.proxy.Enhancer.createClass(Enhancer.java:419) ~[spring-core-5.3.13.jar:5.3.13]
        at org.springframework.context.annotation.ConfigurationClassEnhancer.createClass(ConfigurationClassEnhancer.java:137) ~[spring-context-5.3.13.jar:5.3.13]
        at org.springframework.context.annotation.ConfigurationClassEnhancer.enhance(ConfigurationClassEnhancer.java:109) ~[spring-context-5.3.13.jar:5.3.13]
        at org.springframework.context.annotation.ConfigurationClassPostProcessor.enhanceConfigurationClasses(ConfigurationClassPostProcessor.java:447) ~[spring-context-5.3.13.jar:5.3.13]
        at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanFactory(ConfigurationClassPostProcessor.java:268) ~[spring-context-5.3.13.jar:5.3.13]
        at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:325) ~[spring-context-5.3.13.jar:5.3.13]
        at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:147) ~[spring-context-5.3.13.jar:5.3.13]
        at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:746) ~[spring-context-5.3.13.jar:5.3.13]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:564) ~[spring-context-5.3.13.jar:5.3.13]
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) ~[spring-boot-2.6.1.jar:2.6.1]
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:730) ~[spring-boot-2.6.1.jar:2.6.1]
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:412) ~[spring-boot-2.6.1.jar:2.6.1]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:302) ~[spring-boot-2.6.1.jar:2.6.1]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301) ~[spring-boot-2.6.1.jar:2.6.1]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1290) ~[spring-boot-2.6.1.jar:2.6.1]
        at io.myproject.service.ServiceApplicationKt.main(ServiceApplication.kt:42) ~[main/:na]
Caused by: java.lang.NoClassDefFoundError: io/myproject/service/domain/model/Store
        at java.base/java.lang.Class.getDeclaredMethods0(Native Method) ~[na:na]
        at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3166) ~[na:na]
        at java.base/java.lang.Class.getDeclaredMethods(Class.java:2309) ~[na:na]
        at org.springframework.cglib.core.ReflectUtils.addAllMethods(ReflectUtils.java:448) ~[spring-core-5.3.13.jar:5.3.13]
        at org.springframework.cglib.proxy.Enhancer.getMethods(Enhancer.java:635) ~[spring-core-5.3.13.jar:5.3.13]
        at org.springframework.cglib.proxy.Enhancer.generateClass(Enhancer.java:670) ~[spring-core-5.3.13.jar:5.3.13]
        at org.springframework.cglib.transform.TransformingClassGenerator.generateClass(TransformingClassGenerator.java:33) ~[spring-core-5.3.13.jar:5.3.13]
        at org.springframework.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25) ~[spring-core-5.3.13.jar:5.3.13]
        at org.springframework.cglib.core.ClassLoaderAwareGeneratorStrategy.generate(ClassLoaderAwareGeneratorStrategy.java:57) ~[spring-core-5.3.13.jar:5.3.13]
        at org.springframework.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:358) ~[spring-core-5.3.13.jar:5.3.13]
        at org.springframework.cglib.proxy.Enhancer.generate(Enhancer.java:585) ~[spring-core-5.3.13.jar:5.3.13]
        at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:110) ~[spring-core-5.3.13.jar:5.3.13]
        at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:108) ~[spring-core-5.3.13.jar:5.3.13]
        at org.springframework.cglib.core.internal.LoadingCache$2.call(LoadingCache.java:54) ~[spring-core-5.3.13.jar:5.3.13]
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
        at org.springframework.cglib.core.internal.LoadingCache.createEntry(LoadingCache.java:61) ~[spring-core-5.3.13.jar:5.3.13]
        ... 20 common frames omitted
Caused by: java.lang.ClassNotFoundException: io.myproject.service.domain.model.Store
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) ~[na:na]
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) ~[na:na]
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) ~[na:na]
        ... 36 common frames omitted

【问题讨论】:

    标签: spring spring-boot kotlin


    【解决方案1】:

    好的,我找到了解决问题的方法。我的项目在 Kotlin 中,我的新模型类在 Java 中。我认为混合它们是可以的,但事实证明我必须在 build.gradle.kt 中指定我的 java 类将在哪里。

    将此添加到您的 build.gradle.kt

    configure<SourceSetContainer> {
        named("main") {
            java.srcDir("src/main/kotlin")
        }
    }
    

    【讨论】:

    • src/main/kotlin 顾名思义是针对 Kotlin 的,你应该将 java 放在 src/main/java 而不是 src/main/kotlin。这就是首先没有找到它们的原因,因为 java 设置将在 src/main/java 中查找。
    • 啊哈,谢谢您进一步澄清。但是,如果我将我的 java 类放在它自己的目录中,那将会很混乱。假设我有一个混合项目,并且我想要一个用于所有模型的文件夹而不是两个模型文件夹。那么上面这行就可以了
    • 我猜是情人眼里的乱七八糟的。我喜欢 2 之间的分隔,其他语言也一样,它们有默认路径。
    猜你喜欢
    • 2017-10-17
    • 2018-01-30
    • 2020-11-24
    • 2017-11-05
    • 1970-01-01
    • 2015-04-11
    • 2016-01-10
    • 2019-01-17
    • 2023-03-31
    相关资源
    最近更新 更多