当前位置: 首页 > 知识库问答 >
问题:

为什么当我使用多模块专家项目时,Spring 找不到我的 Bean?

翟博雅
2023-03-14

我有一个项目,其中< code>repository及其测试- repository.tests位于不同的模块中。我喜欢这样组织我的项目。问题是,当我试图运行测试时,Spring说没有这样的bean。下面是详细的错误消息。我不明白黑魔法泉在这里做什么,为什么它会耗尽法力。

[错误] 应返回所有经过的时间: 0.009 秒

到目前为止我所尝试的:

  • 将测试类和存储库类放在同一个包中(但是,它们放在目录结构中的位置。测试转到src/test/java,而存储库转到src/main/java)--

项目结构如下所示,有问题的部分是存储库repository.tests

com.encyclopedia-galactica.sourceformats:application
+- com.encyclopeia-galactica.sourceformats:entities
+- com.encyclopeia-galactica.sourceformats:entities.tests
+- com.encyclopeia-galactica.sourceformats:dtos
+- com.encyclopeia-galactica.sourceformats:dtos.tests
+- com.encyclopeia-galactica.sourceformats:mappers.interfaces
+- com.encyclopeia-galactica.sourceformats:mappers.implementations
+- com.encyclopeia-galactica.sourceformats:mappers.tests
+- com.encyclopeia-galactica.sourceformats:controllers
+- com.encyclopeia-galactica.sourceformats:controllers.tests
+- com.encyclopeia-galactica.sourceformats:repositories
+- com.encyclopeia-galactica.sourceformats:repositories.tests
+- com.encyclopeia-galactica.sourceformats:services
+- com.encyclopeia-galactica.sourceformats:services.tests

< code >存储库的pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.encyclopeia-galactica.sourceformats</groupId>
    <artifactId>repositories</artifactId>
    <name>repositories</name>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>com.encyclopeia-galactica.sourceformats</groupId>
            <artifactId>entities</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

</project>

< code>repositories.tests的pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.encyclopeia-galactica.sourceformats</groupId>
    <artifactId>repositories.tests</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>org.assertj</groupId>
            <artifactId>assertj-core</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.encyclopeia-galactica.sourceformats</groupId>
            <artifactId>entities</artifactId>
            <version>1.0.0-SNAPSHOT</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.encyclopeia-galactica.sourceformats</groupId>
            <artifactId>repositories</artifactId>
            <version>1.0.0-SNAPSHOT</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.encyclopedia-galactica.sourceformats</groupId>
            <artifactId>application</artifactId>
            <version>1.0.0-SNAPSHOT</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

测试类(它被放置在 src/测试/java 中,但包名与存储库类相同:

package com.encyclopediagalactica.sourceformats.repositories.sourceformat;

import static org.assertj.core.api.Assertions.assertThat;

import java.util.List;
import com.encyclopediagalactica.sourceformats.entities.SourceFormat;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager;
import org.springframework.test.context.ContextConfiguration;

@DataJpaTest
@ContextConfiguration(
    classes = com.encyclopediagalactica.sourceformats.application.SourceFormatServiceApplication.class)
public class FindAllTests {

  @Autowired
  private TestEntityManager testEntityManager;

  @Autowired
  private SourceFormatRepository repository;

  public FindAllTests() {
  }

  @Test
  public void shouldReturnAll() {

    // Arrange
    SourceFormat sf1 = new SourceFormat(100L, "asd");
    SourceFormat sf2 = new SourceFormat(200L, "asd2");
    this.testEntityManager.persist(sf1);
    this.testEntityManager.persist(sf2);

    // Act 
    List<SourceFormat> sourceFormats = (List<SourceFormat>) this.repository.findAll();

    // Assert
    assertThat(sourceFormats.size()).isEqualTo(2);
  }

}

知识库:

package com.encyclopediagalactica.sourceformats.repositories.sourceformat;

import org.springframework.data.repository.NoRepositoryBean;
import org.springframework.data.repository.PagingAndSortingRepository;

@NoRepositoryBean
public interface SourceFormatBaseRepository<T, ID> extends PagingAndSortingRepository<T, ID> {
  <S extends T> S save(S entity);

  Iterable<T> findAll();
}

存储库:

package com.encyclopediagalactica.sourceformats.repositories.sourceformat;

import com.encyclopediagalactica.sourceformats.entities.SourceFormat;

public interface SourceFormatRepository extends SourceFormatBaseRepository<SourceFormat, Long> {
}

错误消息:(很抱歉格式化,blockquote中的某些内容似乎发生了更改,因为它没有使用单空间字体显示内容)

[信息]检测到更改-重新编译模块![信息]将1个源文件编译到/Users/andrascsanyi/Dev/github.com/EncyclopediaGalactica/EG/repositories。tests/target/test classes[INFO][INFO]——maven surefire插件:2.22.2:test(默认测试)@repositories。测试--[INFO][INFO]--------------------------------------------------------------[INFO]T E S T S[INFO]--------------------------------------[INFO]正在运行com.encyclopediagalactica.sourceformats.repositories.sourceformat。FindAllTests 09:05:31.009〔main〕调试。___124;|._| |124; ||,|///=|===|/124;===2.7.1版:Spring引导:

2022-07-24 09:05:31.864 INFO 43466-[main]c . e . s . r . source format . FindAllTests:使用Java 18.0.2在andras-MacBook-pro . local上使用PID 43466启动FindAllTests(由andrascscanyi在/Users/andrascscanyi/Dev/github . com/EncyclopediaGalactica/EG/repositories . tests中启动)2022-07-24 09:052022-07-24 09:05:32.400 INFO 43466-[main]. s . d . r . c . repositoryconfigurationdelegate:在5毫秒内完成Spring数据仓库扫描。找到0个JPA仓库接口。2022-07-24 09:05:32.481 INFO 43466-[< br > main]beddedDataSourceBeanFactoryPostProcessor:用嵌入式版本替换“dataSource”数据源bean 2022-07-24 09:05:32.757 INFO 43466-[main]o . s . j . d . e . embeddeddatabasefactory:正在启动嵌入式数据库:URL = ' JDBC:H2:mem:a66d 2659-af0d-af0dDB _ CLOSE _ DELAY =-1;DB_CLOSE_ON_EXIT=false ',username = ' sa ' 2022-07-24 09:05:33.331 INFO 43466-[< br > main]o . Hibernate . JPA . internal . util . log helper:hhh 000204:Processing persistencunitinfo[name:default]2022-07-24 09:05:33.414 INFO 43466-[main]org . Hibernate . version:hhh 000044 j . localcontainereentitymanagerfactorybean:已初始化持久性单元的JPA EntityManagerFactory ' default ' 2022-07-24 09:05:34.408 INFO 43466-[main]c . e . s . r . source format . find all tests:在2.997秒内启动find all tests(JVM运行4.157)

2022-07-24 09:05:34.432错误43466-[main]o.s.test.context。TestContextManager:在允许TestExecutionListener时捕获异常[org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@c430e6c]准备测试实例[com.encyclopediagalactica.sourceformats.repositories.sourceformat.FindAllTests@6f43c82]

[错误]测试运行:1,失败:0,错误:1,跳过:0,所用时间:3.564秒

共有1个答案

姬烨磊
2023-03-14

我犯了很多错误:

  • 主类应该是顶级类。在我的例子中是com.encyclopediagalactica.sourceformats。应用程序:这不是推荐的--

现在,应用程序启动并为请求提供服务。测试也在运行,它们是绿色的。

 类似资料:
  • 我在我的项目中使用了Java、Wildfly18、Primefaces和JSF,但是我得到了这个警告!有人知道为什么我只在Firefox中使用这个项目时会收到这个警告吗? 任何信息都会有帮助。以下是服务器日志: 17:13:41,238警告[javax.enterprise.resource.webcontainer.jsf.application](默认任务-291)JSF1064:Ressou

  • 我正在使用spring boot,我决定只是为了把我的项目分成模块。我有4个模块,网络,服务,存储库,领域。除了JSP外,其他工作都很好,spring找不到这些页面。但当我没有把我的项目分成模块时,它就起作用了。我没有改变配置。 这是我的web模块结构 Runner位于web模块中,如下所示: 此外,Intellij想法还告诉我,index.jsp没有视图解析器,尽管我显式地添加了视图解析器bea

  • 我似乎无法让Maven在多模块项目中找到兄弟姐妹的模块。 我已经在所有模块中运行了。 下面是MagnicCompCommon 下面是Model

  • 问题内容: 我有一个python项目(我在virtualenv中运行),其结构如下: script.py 我使用以下命令从venv激活运行项目,并从Project目录中运行该项目: 该脚本会运行,但是在退出之前会发出以下错误: 我试过运行python shell并尝试从那里导入模块,但没有出错。我在src的每个目录中都有_ _init__.py。python是否将工作目录视为src / scrip

  • 我用RESTAPI创建了一个非常基本的Spring Boot项目。我尝试将它连接到我的Angular应用程序,但它出现了一些CORS安全错误,所以我切换到了Postman。我试图用邮递员测试它,但我一直收到一个404未找到邮递员错误。为什么我不能连接到我的后端并发布到测试仪功能? 控制器 主要的 安慰 等效的 cURL 命令 邮递员