SpringBoot + :从零创建一个多模块项目

552 阅读2分钟

说明

  本文手把手演示如果利用Gradle + SpringBoot创建一个多模块项目,作为以后功能点验证、持续开发的基础。

环境信息

  1. 操作系统:win 10
  2. JDK:1..8.0-181
  3. Gradle:gradle-6.8.2
  4. IDEA:2020.1 ULTIMATE
  5. SpringBoot:2.5.6

新建项目

  1. 打开IDEA,显示如下,点击 “创建项目” image.png

  2. 选择以Gradle方式创建项目,指定项目的JDK版本后,点击Next进入下一步

image.png

  1. 填写项目基本信息,点击完成

image.png

Location:项目目录,选定目录后ArtifactId和Name也即确定

GroupId:分组名,一般以域名反转形式设置,如域名是www.baidu.com, 则此处设置为com.baidu

ArtifictId:理解为项目名

Name:同ArtifactId

  1. 如果你需要更换gradle依赖,配置如下

image.png

  1. 完整的bild.gradle设置如下
//build.gradle配置初识:https://blog.csdn.net/lw_power/article/details/51241720
//gradle默认属性:http://www.cnblogs.com/langtianya/p/5209515.html
plugins {
    id 'java'
}
​
//全局使用的值
ext {
    springBootVersion = '2.5.6'
}
​
//该项目与全部子项目的属性
allprojects {
    //指定编译.java文件的jdk版本
    sourceCompatibility = 1.8
    //确保class文件与targetCompatibility指定版本,或者更新的java虚拟机兼容
    targetCompatibility = 1.8
​
    //项目所属组,中间以.(英文逗号)隔开
    group 'com.yibenzhenjing'
    //项目版本号
    version '1.0.1-SNAPSHOT'
​
    //应用插件
    apply plugin: 'java'
    apply plugin: 'idea'
​
    // java编译的时候缺省状态下会因为中文字符而失败,设置字符集
    [compileJava, compileTestJava, javadoc]*.options*.encoding = 'UTF-8'
​
    //仓库,国内外仓库访问、下载速度会不同
    repositories {
        mavenLocal()
        maven { url "http://maven.aliyun.com/nexus/content/groups/public" } //国内仓库,下载会快一点
    }
​
    //依赖,testCompile表示依赖范围是test,其他依赖写compile
    dependencies {
        compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '2.5.6'
    }
}
​
subprojects {
​
}
​
  1. 在项目中创建.gitignore文件,填写指定格式的文件 image.png

至此,项目主模块创建完成。

创建子模块

  1. 选中项目后, File -> New -> Module 或 右击项目,选择 New -> Module

image.png

image.png

  1. 选择以Gradle方式创建模块,指定JDK版本后,进入下一步

image.png

  1. 填写模块信息,点击完成

image.png

Parent:父级,选择之前创建的core项目

Name:填写模块名

其他配置不需要填写

  1. 可以看到项目下多出了util模块,build.gradle配置清空即可
// 如果单独构建,产物包名称可自定义
archivesBaseName = 'core-util'
​
dependencies {
​
}
  1. 在util模块下创建类

image.png

package com.yibenzhenjing.core.util;
​
/**
 * 字符拼接工具
 *
 * @author tangjialiang
 * @since 2021-10-20
 **/
public class JoinUtils {
    /**
     * 分隔符:短横杠
     */
    public static final String SEPARATOR_DASH = "-";
​
    /**
     * 用默认连接符拼接多个字符串
     *
     * @param key 待拼接的字符串
     * @return 拼接结果
     */
    public static String joinString(String... key) {
        return joinStringWithSeprator(SEPARATOR_DASH, key);
    }
​
    /**
     * 指定连接符拼接多个字符串
     *
     * @param separator 连接符
     * @param key       待拼接的字符串
     * @return 拼接结果
     */
    public static String joinStringWithSeprator(String separator, String... key) {
        StringBuilder sBuiler = new StringBuilder();
        int paramSize = key.length;
        int endKeyIndex = paramSize - 1;
        for (int i = 0; i < paramSize; i++) {
            sBuiler.append(key[i]);
            if (i > 0 && i < endKeyIndex) {
                sBuiler.append(separator);
            }
        }
        return sBuiler.toString();
    }
​
}
  1. 将util构建为二方库

image.png

执行成功后看到如下

image.png

  1. 创建应用模块site,过程同util,build.gradle如下
buildscript {
    repositories {
        mavenLocal()
        maven { url "http://maven.aliyun.com/nexus/content/groups/public" }
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}
apply plugin: 'org.springframework.boot'
​
archivesBaseName = 'site'
​
dependencies {
    compile project(':util')
}
  1. 创建项目启动类
package com.yibenzhenjing.core.site;
​
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
​
/**
 * 项目启动类
 *
 * @author tangjialiang
 * @since 2021-10-27
 **/
@SpringBootApplication
public class SiteApplication {
    public static void main(String[] args) {
        SpringApplication.run(SiteApplication.class, args);
    }
}
  1. site模块下创建测试类
package com.yibenzhenjing.core.site.controller;
​
import com.yibenzhenjing.core.util.JoinUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
​
/**
 * 验证项目正常启动的类
 *
 * @author tangjialiang
 * @since 2021-10-28
 **/
@RestController
public class HelloController {
​
    @GetMapping("hello")
    public String hello() {
        return "hello" + JoinUtils.joinString(",", "author");
    }
}
​
  1. 启动项目,

image.png

并在浏览器中打开 http://localhost:8080/hello ,结果如下,满足预期

image.png

至此,通过IDEA创建的 Gradle + SpringBoot的项目成功开发,如果您正在新建类似项目,希望能给您写参考。