Multimodule gradle project I get错误:Not Found(Spring with module dependency)

mec1mxoz  于 2023-06-23  发布在  Spring
关注(0)|答案(1)|浏览(99)

在使用Java和Gradle学习和实现多模块项目时,我在发出请求时遇到以下错误:
Postman

{
     "status": 404,
     "error": "Not Found",
     "message": "No message available",
     "path": "/tasks/hello"
}

当运行命令“./gradlew:task-service:bootRun”时,项目似乎正常启动“Tomcat在端口上启动:8080(http),上下文路径为“”。但是当我提出请求时,我得到的是“找不到”。我不能说错误在哪里,但我意识到“域”模块的导入不正确,或者我不知道如何配置它。你能帮我吗?

项目及其模块-group 'com.nyuro'

nyuro-backend (root-project)
 *domain
 *task-service

“域”模块包含实体,例如Task类。服务将是带有@Controller,@Service,@Repository的Sping Boot 应用程序。在这个例子中是“任务服务”。
以下是设置的主要片段。我希望这足以指出一些配置错误。以下是Github上的代码:Project Link Here
settings.gradle(nyuro-backend)

rootProject.name = 'nyuro-backend'
include 'domain'
include 'task-service'

build.gradle(nyuro-backend)

plugins {
    id 'java'
    id 'application'
}

group 'com.nyuro'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
}

test {
    useJUnitPlatform()
}

build.gradle(:domain)

plugins {
    id 'java'
    id 'application'
}

group 'com.nyuro'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
    implementation 'jakarta.persistence:jakarta.persistence-api:3.1.0'
}

test {
    useJUnitPlatform()
}

build.gradle(:task-service)

plugins {
    id 'java'
    id 'application'
    id 'org.springframework.boot' version '3.1.0'
    id 'io.spring.dependency-management' version '1.1.0'
}

group = 'com.nyuro'
version = '0.0.1-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    runtimeOnly 'com.mysql:mysql-connector-j'
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
    implementation project(':domain')
}

tasks.named('test') {
    useJUnitPlatform()
}

TaskServiceApplication.java

@EntityScan({"com.nyuro.domain"})
@EnableJpaRepositories({"com.nyuro.domain"})
@ComponentScan({"com.nyuro.domain"})
@SpringBootApplication
public class TaskServiceApplication {

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

}

导入domain.models.Task模块时似乎出现问题。我还对@EntityScan、@EnableJpaRepositories、@ComponentScan导入进行了几次测试。无满意结果。

vmdwslir

vmdwslir1#

您的404 Not Found错误完全来自您的Controller由于SpringBootApplication上的自定义ComponentScan注解而未被拾取,但让我再提出几点:
1.不应该提交.gradle.ideabuild等。目录到Git。创建一个.gitignore文件来忽略它们-你有一个,但它在task-service内部,你应该在根目录下有一个(但你可以有更具体的一些特定的子项目)
1.您有2个gradle Package 器(在root和task-service中)-task-service中的 Package 器应该删除
1.我不认为你需要task-service/settings.gradle文件。我知道你可能从一个单模块项目开始,然后把它变成了一个多模块项目。
1.您正在com.nyuro.domain上创建ComponentScanEntityScan,但在这个包中没有类(域类在module包中),最重要的是@SpringBootApplication已经在它所在的包上进行了组件扫描。您应该删除@ComponentScan(“com.nyuro.domain”),因为它会阻止Spring拾取不在该包下的Controller(SpringBootApplication位于com.nyuro.taskservice中,控制器位于com.nyuro.taskservice.controllers中,因此默认的组件扫描将其作为子包拾取)。如果你想扫描更多的软件包,你还需要添加task-service软件包-@ComponentScan({"com.nyuro.domain", "com.nyuro.taskservice"})
1.你的数据库设置是不工作的我,我不得不删除它使这个应用程序启动


相关问题