Gradle多模块项目搭建完整教程,模块互相依赖,基于springboot开发
作者:mmseoamin日期:2023-12-14

1.父项目创建,【com.fdw.hibernate】

Gradle多模块项目搭建完整教程,模块互相依赖,基于springboot开发,第1张  

Gradle多模块项目搭建完整教程,模块互相依赖,基于springboot开发,第2张

 2.子项目创建,【com.fdw.study】【com.fdw.parent】

Gradle多模块项目搭建完整教程,模块互相依赖,基于springboot开发,第3张

Gradle多模块项目搭建完整教程,模块互相依赖,基于springboot开发,第4张

 3.最终结构目录

 Gradle多模块项目搭建完整教程,模块互相依赖,基于springboot开发,第5张

4. 父工程build.gradle

plugins {
    id 'java'
}
allprojects {
    // 指定需要的插件
    // 指定语言
    apply plugin: 'java'
    //指定编辑器
    apply plugin: 'idea'
    // 配置项目信息
    group 'com.fdw'
    version '1.0.0'
    // 配置仓库
    repositories {
        maven {
            url 'https://maven.aliyun.com/repository/gradle-plugin'
        }
        maven {
            url "https://maven.aliyun.com/nexus/content/groups/public/"
        }
        mavenCentral()
        gradlePluginPortal()
        mavenLocal()
    }
}
// 配置子工程
subprojects {
    apply plugin: 'java'
    // 指定编译版本
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
    // 配置字符编码
    tasks.withType(JavaCompile) {
        options.encoding = 'UTF-8'
    }
    //配置子模块依赖
    dependencies {
        // https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web
        implementation 'org.springframework.boot:spring-boot-starter-web:2.6.6'
        // https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter
        implementation 'org.springframework.boot:spring-boot-starter:2.6.3'
        implementation 'org.projectlombok:lombok:1.18.12'
        annotationProcessor 'org.projectlombok:lombok:1.18.12'
    }
}
tasks.named('test') {
    useJUnitPlatform()
}

allprojects代码块:该代码块中的配置将适用于所有项目,包括根项目和所有子项目。可以在其中定义共享的配置和依赖项

subprojects代码块:该代码块中的配置将只应用于子项目,而不包括根项目。可以在其中设置子项目独有的配置或覆盖allprojects中的配置 ,子工程能自动继承在这里配置的依赖

5. 父工程setting.gradle

rootProject.name = "hibbernatestudy"
include 'study','parent'

建立父子关系(很关键)

6.study项目的build.gradle文件

dependencies {
}

7.parent项目的build.gradle文件,parent项目依赖study项目

dependencies {
    implementation project(':study')
}

8.parent项目配置后才能使用study项目的bean

现在这样直接启动parent项目的话,study里的Bean是无法通过@Autowired注解注入来被parent使用的,原因在于,虽然parent依赖了study项目,但项目启动时并未去加载study中的类,需要如下配置:

1.在study项目src>>main>>java目录下新建配置类DefultConfig.java,@ComponentScan选择所有要扫描注入的包

package com.fdw.study.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan("com.fdw.study.controller")
public class DefultConfig {
}

2.在study项目src>>main>>resources目录下新建META-INF文件夹

3.在META-INF文件夹下新建spring.factories文件,填写步骤一中的配置类全限定名

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.fdw.study.config.DefultConfig

9.在study项目中写一个controller接口类

Gradle多模块项目搭建完整教程,模块互相依赖,基于springboot开发,第6张

package com.fdw.study.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String hello(){
        return "hello world !";
    }
}

10.parent项目加上启动类,启动parent

Gradle多模块项目搭建完整教程,模块互相依赖,基于springboot开发,第7张

package com.fdw.parent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ParentApplication {
    @Autowired
    public static void main(String[] args) {
        SpringApplication.run(ParentApplication.class, args
        );
    }
}

application.yml配置端口8085

Gradle多模块项目搭建完整教程,模块互相依赖,基于springboot开发,第8张  

11.结果展示

Gradle多模块项目搭建完整教程,模块互相依赖,基于springboot开发,第9张