来自其他jar的Spring Boot组件不在上下文中

l0oc07j2  于 5个月前  发布在  Spring
关注(0)|答案(2)|浏览(60)

我有以下情况。JDK 17,Spring-Boot:2.6.2。一个gradle多项目。一个项目是一个库(java-library,没有spring boot插件)。另一个项目是一个带spring boot插件的spring boot应用程序。通常不使用spring依赖管理插件,而是使用gradle平台概念。应用程序项目包含每个“实现(project(':..”)对库项目的依赖。
图书馆:

  • 库项目和Sping Boot 应用程序项目有不同的包。

例如:库根包是a.b.c,应用程序根包是a.b.d

  • 库项目在包层次结构的根包中有一个配置类(例如a. b.c. LibraryConfig),它用@Configuration annotation注解,并用@ PencentScan annotation注解,它具有指向此配置类的属性“basePackageClass”:
@Configuration
    @ComponentScan(basePackageClass = LibraryConfig.class)
    public class LibraryConfig {

字符串

  • 在库层次结构内部(在包a. b.c. * 中也是如此)是服务和rest控制器。

适用范围:

  • 应用程序在包层次结构的根包中(例如在a.b.d中)有应用程序类,在子包“config”中有配置类(例如a.b.d.config.AppConfig),它从库导入配置类:
@Configuration
  @Import(a.b.c.LibraryConfig.class)
  public class AppConfig {


问题:库中的类在运行时存在-我们能够加载它们。库中没有任何组件在上下文中(未注册),既没有服务也没有rest控制器。
我们遗漏了什么?
我们已经尝试了不同的导入和扫描星座。还添加了组件扫描到应用程序类,并设置有特定的软件包。没有帮助。

rhfm7lfc

rhfm7lfc1#

问题是,主要应用程序是使用 Spring Boot 索引注解处理器和库-不。所以在启用库注解处理器后,问题就解决了。

avkwfej4

avkwfej42#

相同。正如在接受的答案中提到的-第一个模块包含这样的路径部分:

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>${maven-compiler-plugin.version}</version>
            <configuration>
                <parameters>true</parameters>
                <release>${java.version}</release>
                <annotationProcessorPaths>
                    <path>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring-context-indexer</artifactId>
                        <version>${spring-framework.version}</version>
                    </path>
                </annotationProcessorPaths>
            </configuration>
   </plugin>

字符串
而且依赖库中没有这样的参数。因此,尽管我的@ martent-class和第一个模块中的@SpringBootApplication在同一个包中,我还是遇到了同样的错误。

相关问题