JAVA新实战2:Gradle+Springboot多模块项目搭建

1、序言

        本文以将在参照ruoyi若依系统代码架构的基础上进行优化,执行VSCode+Gradle+Springboot多模块的项目搭建实践,成不成也就讲究着看吧,我们暂且命名为JoJava。掌握本文后,您可以轻松对MAVEN下的多模块JAVA项目迁移到Gradle下。虽然本文以VSCode作为开发工具,但核心代码同样适用于IntelliJ IDEA+Gradle环境。网上很多的类似内容似乎不够完整或过于繁琐。

        相关代码将持续更新到以下JoJava代码块仓库,免费开放给大家:jojava: 一些常用的java代码块集合icon-default.png?t=N7T8https://gitee.com/duihao/jojava

        本文开发环境:

OpenJDK21、Spring Boot 3.1.5、Gradle8.4、Visual Studio Code 1.8.3

        最终搭建后将形成以下多模块SpringBoot项目代码结构:

JoJava
│
├── app
│   ├── build.gradle
│   └── src
├── common
│   ├── build.gradle
│   └── src
├── framework
│   ├── build.gradle
│   └── src
├── generator
│   ├── build.gradle
│   └── src
├── quartz
│   ├── build.gradle
│   └── src
├── system
│   ├── build.gradle
│   └── src
├── ui
│   ├── build.gradle
│   └── src
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle

2、创建根项目工程

        在VSCode下使用Ctrl+Shift+P快捷键创建项目 -> 选择 “Spring Initializr: Create a Gradle Project...”创建Spring项目。依次选择 Springboot 版本(3.1.5)、输入项目包组名 Group Id(com.jojava)、项目ID(jojava)等之后,创建一个新项目。

        创建项目步骤按提示依次执行选择即可,如果您需要详细了解创建项目的步骤细节,请参考系列讲座的另一篇文章《JAVA新实战1:使用vscode+gradle+openJDK21搭建java springboot3项目开发环境》。

       默认创建的项目为单模块结构,多模块项目下根目录下不存在src,这里把默认生成的src目录直接删除,然后执行后续操作。

3、根项目工程build.gradle

        针对默认创建的单模块项目,我们受限需要通过修改根配置build.gradle来让项目具备多模块基本能力,本步骤是整个项目改造为多模块模式的关键。

        请参考以下配置内容修改,其中jdk版本号需要与您的安装环境匹配:

plugins {
	id 'java'
	id 'org.springframework.boot' version '3.1.5' apply false
	id 'io.spring.dependency-management' version '1.1.3'
}

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

java {
	sourceCompatibility = '21'
}

configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}
	
// 所有项目(主项目+子项目)配置
allprojects {
    // 指定需要的插件
    // 指定语言
    apply plugin: 'java'
    // 配置项目信息(继承主项目)
    group group
    version version
 
    // 配置仓库
	repositories {
		//阿里
		maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
		//腾讯
		//maven { url 'https://mirrors.cloud.tencent.com/nexus/repository/maven-public/' }
		//华为
		//maven { url 'https://developer.huawei.com/repo/' }
		mavenCentral()
		gradlePluginPortal()
        mavenLocal()
	}

}

// 子项目配置
subprojects {

	// 子项目插入组件
	apply plugin: 'org.springframework.boot'
	apply plugin: 'io.spring.dependency-management'
	apply plugin: 'java'

	// 编译JDK版本
	// sourceCompatibility = '21'

	// 配置字符编码
    tasks.withType(JavaCompile) {
        options.encoding = 'UTF-8'
    }

	// 子项目引用依赖
	dependencies {
		implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch'
		implementation 'org.springframework.boot:spring-boot-starter-data-redis'
		implementation 'org.springframework.boot:spring-boot-starter-actuator'
		implementation 'org.springframework.boot:spring-boot-starter-web'
		compileOnly 'org.projectlombok:lombok'
		annotationProcessor 'org.projectlombok:lombok'
		testImplementation 'org.springframework.boot:spring-boot-starter-test'
		developmentOnly 'org.springframework.boot:spring-boot-devtools'
	} 
	
	tasks.named('test') {
		useJUnitPlatform()
	}

	// 开启构建bootJar
	tasks.bootJar {
		enabled = true
	}
	// tasks.jar {
	// enabled = true
	// }

}

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

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

       特别注意:

        在subproject对象内,apply 插件需要与默认创建的plugins保持一致。

        比如,我这里默认生成的plugins如下

        那么,对应apply配置结果如下:

	apply plugin: 'org.springframework.boot'
	apply plugin: 'io.spring.dependency-management'
	apply plugin: 'java'

         实际配置结果截图:

4、创建子项目

        在当前主项目下,使用Ctrl+Shift+P快捷键创建项目 -> 选择 “Spring Initializr: Create a Gradle Project...”创建Java Spring子模块,各个步骤设置均与主项目保持一致,最后一步目录选择,请直接选主目录。

        我这里先创建app、common两个子模块。创建后修改子模块的 build.gradle 配置,仅在子模块配置中保留,以下代码。

        更改子项目资源目录下src/main/resources/ 配置为文件名为 application.yml(JAVA新实战系列教程中均推荐配置文件采用yml格式)。

        这里注意在创建子项目之后,VSCode下不会自动被识别为JAVA模块结构,需要手动操作下,右键子项目目录,在弹出的菜单中选择“Add Folder to Java Source Path”即可,这样就可以方便创建class、包等java常用文件了。

5、根项目工程setting.gradle

        这里需要在默认生成的基础之上增加对子项目的引用,以建立父子关系,内容如下

6、Common子项目build.gradle

        该项目为是全系统各项目工程的核心依赖项目,一般被其他项目依赖,而不依赖其他项目,其build.gradle内容极简,如下:

tasks.bootJar {
	enabled = false //关闭
}
dependencies {
 
}

7、App子项目build.gradle

        该项目为全系统入口启动项目,也是当前系统应用的主体打包输出项目,依赖多个子项目,这里以依赖 common项目为例,其build.gradle内容如下:

dependencies {
    implementation project(':common')
}

8、编写Common模块代码

        在Common项目下创建包config,然后创建JoConfig类,用于后面在App项目中进行调用测试。VSCode中的创建方式参考下图:

 

        JoConfig类文件代码如下:


package com.jojava.config;

public class JoConfig {

    /** 项目名称 */
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

9、编写App模块代码

        在App项目下创建包controller,然后创建HomeController类,用于测试。

        代码如下:

package com.jojava.app.controller;

import java.util.Map;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.jojava.common.config.JoConfig;

@RestController
public class HomeController {
    /**
     * @param model
     * @return
     */
    @RequestMapping("/home")
    public String home(Map<String, Object> model) {
        System.out.print("对号入座,容易实现!");
        JoConfig joConfig = new JoConfig();
        joConfig.setName("Duihao JoJava");
        return joConfig.getName() + " - 对号入座,容易实现!";
    }
}

        从下面标记中可以看到,这里已经在App项目中成功引用Common项目下的类及方法,并实现了一个简单的web方式的调用方法编写。

10、App项目启动类设置

        作为全系统的主体打包输出项目,必须要设置一个启动类,否则整个项目将没有启动入口,一般情况下在创建Java Spring Boot类型子项目时已自动生成。

       若未自动生成过,请在 app下直接创建类AppApplication类文件,代码如下:

package com.jojava.app;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class AppApplication {

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

}

        编辑Spring项目启动配置文件 application.yml,代码如下:


# 开发环境配置
server:
  # 服务器的HTTP端口,默认为8080
  port: 8081
  servlet:
    encoding:
        charset: UTF-8
        enabled: true
        force: true
        force-response: true
    # 应用的访问路径
    context-path: /
  tomcat:
    # tomcat的URI编码
    uri-encoding: UTF-8
    # 连接数满后的排队数,默认为100
    accept-count: 1000
    threads:
      # tomcat最大线程数,默认为200
      max: 800
      # Tomcat启动初始化的线程数,默认值10
      min-spare: 100

11、项目启动运行

方法1:使用Java Projects方式启动,点击下图中按钮

方法2:使用Gradle Projects方式启动,点击下图中按钮

12、查看运行结果

        浏览器访问 http://127.0.0.1:8081/home 返回以下内容,表示成功。

13、结束语

        网上找了很多种基于gradle的JAVA Spring Boot多模块项目教程,有各种各样的问题,且对VSCode支撑的教程几乎难找,本案已力求简单,并足够全面,在VSCode+gradle下的SpringBoot多模块项目架构实战经验。

        本教程中只写了两个子项目,实际将结合对若依ruoyi系统的架构理解和优化进行补齐,并形成一个可复用的框架,相关代码将会随着系列教程的持续更新同步更新,大家也可以略过教程直接下载已写好的代码框架进行使用

        代码请去这里下载JoJava代码块:jojava: 一些常用的java代码块集合icon-default.png?t=N7T8https://gitee.com/duihao/jojava

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值