簡體   English   中英

Spring 引導多(maven)模塊項目找不到它的存儲庫——如何解決這個問題?

[英]Spring Boot multi (maven) module project can't find its Repository -- how to fix this?

As my first step in mastering Java 9 modules, I'm first creating a Java program that resides in nested directories, all joined by a root-level Maven pom.xml. 也就是說,Java 模塊尚未涉及。

我的程序的源代碼是一個 Spring 引導程序,它已經可以工作了。 我將該程序分為 controller(訪問 Maven 模塊)和數據訪問(持久性 Maven 模塊)。 我的這個任務的導師是這個 Spring 站點: https://spring.io/guides/gs/multi-module/

我通過 Visual Source Code 運行這個,在我的 JAVA_HOME 中使用 Java 11。 Spring 引導程序啟動,然后產生這種錯誤:

Parameter 0 of constructor in com.logicaltiger.persistence.service.LocationService required a bean of type 'com.logicaltiger.persistence.repository.LocationRepository' that could not be found.

該程序我切片/切塊之前運行,所以我的問題是 Spring 配置。

我的請求? 是否可以修復我的配置以便 Spring Boot 找到它的所有部分?

AccessApplication 有這個:

@SpringBootApplication(scanBasePackages = "com.logicaltiger")
@ComponentScan("com.logicaltiger")
@EnableAutoConfiguration
public class AccessApplication {

    public static void main(String[] args) {
        SpringApplication.run(AccessApplication.class, args);
    }

}

LocationService 有這個:

@Service
[snip]

private final LocationRepository locationRepository;

public LocationService(LocationRepository locationRepository) {
    this.locationRepository = locationRepository;
}

LocationRepository 有這個:

@Repository
public interface LocationRepository extends CrudRepository<Location, Long> {

這是我的目錄結構,忽略.mvn等。

district-updater-modules
    access
        src
            main
                java
                    com
                        logicaltiger
                            access
                                controller
                                    (various controller files, with @Controller annotation)
                                util
                                     Utilities.java
                                AccessApplication.java
                resources
                    static
                    templates
                    application.properties
        pom.xml
    persistence
            main
                java
                    com
                        logicaltiger
                            persistence
                                model
                                    (various model files)
                                repository
                                    LocationRepository.java
                                service
                                    LocationService.java
                                util
                                     Utilities.java
                                AccessApplication.java
                resources
        pom.xml
    pom.xml

根 pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" [snip] >
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.logicaltiger</groupId>
    <artifactId>district-updater-modules</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>district-updater-modules</name>
    <description>Wrapper for the modules of DistrictUpdater -- Java modules</description>
    <packaging>pom</packaging>

    <modules>
        <module>access</module>
        <module>persistence</module>
    </modules>

</project>

訪問 pom.xml(省略一些依賴):

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" [snip] >
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.logicaltiger.access</groupId>
    <artifactId>access</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>district-updater-modules-access</name>
    <description>DistrictUpdater web API access module</description>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>com.logicaltiger</groupId>
            <artifactId>persistence</artifactId>
            <version>${project.version}</version>
        </dependency>    
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

持久化 pom.xml(省略了一些依賴):

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" [snip] >
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.logicaltiger</groupId>
    <artifactId>persistence</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>district-updater-modules-persistence</name>
    <description>DistrictUpdater persistence module</description>
    <packaging>jar</packaging>

    <properties>
        <java.version>11</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
    </dependencies>

</project>

謝謝,

傑羅姆。

經過大量的沖浪和實驗,我終於在這里找到了解決方案。

除了@ComponentScan("com.logicaltiger")你還需要

  • @EnableJpaRepositories(basePackages = "com.logicaltiger")以查找所有存儲庫,
  • 以及@EntityScan("com.logicaltiger.*")以查找所有實體。

因此:

@SpringBootApplication(scanBasePackages = "com.logicaltiger")
@ComponentScan("com.logicaltiger")
@EnableJpaRepositories(basePackages = "com.logicaltiger")
@EntityScan("com.logicaltiger.*")
@EnableAutoConfiguration
public class AccessApplication {

    public static void main(String[] args) {
        SpringApplication.run(AccessApplication.class, args);
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM