springBoot+gradle构建多模块项目
前言
之前已经完成构建简单的项目,详情可见
本文在其基础之上完成。
创建Gradle项目
按照文首的链接先创建单模块的项目,此时唯一不同的是项目名称本文用的是qycms。
配置settings文件
提示:若先配置settings文件无法触发自动构建,请先执行下一步“修改根目录 build.gradle”,之后保存就会自动执行。
来到此处即代表你已经构建好一个单模块项目了。若想构建一个多模块的项目,则需要配置settings.gradle
文件以描述模块(项目)关系。
用rootProject.name设置根模块名称,include描述子模块的名称和关系,如:
rootProject.name = 'qycms' include 'qycms-core:common' include 'qycms-core:system-provider' include 'qycms-core:system-console'
保存,等自动构建后。此时,G:\none\Java\idea\qycms>下执行
tree /f
可得到类似的结构,注意此时子项目中是不存在build.gradle文件的,该文件需要手动创建:
本项目会将springBoot相关jar包的引用以及配置文件放在common模块下。
system-provider为系统级项目的业务逻辑,system-console为系统级项目的api所在的Controller层。
│ .gitignore │ build.gradle │ README.md │ settings.gradle │ ├─qycms-core │ │ │ ├─common │ │ │ build.gradle │ │ │ common.iml │ │ │ │ │ │ │ │ └─src │ │ ├─main │ │ │ ├─java │ │ │ └─resources │ │ │ │ application.properties │ │ │ │ │ └─test │ │ ├─java │ │ └─resources │ ├─src │ │ ├─main │ │ │ ├─java │ │ │ └─resources │ │ └─test │ │ ├─java │ │ └─resources │ ├─system-console │ │ │ build.gradle │ │ │ system-console.iml │ │ │ │ │ └─src │ │ ├─main │ │ │ ├─java │ │ │ │ │ │ │ └─resources │ │ └─test │ │ ├─java │ │ └─resources │ └─system-provider │ │ build.gradle │ │ system-provider.iml │ │ │ └─src │ ├─main │ │ ├─java │ │ │ │ │ └─resources │ └─test │ ├─java │ └─resources └─src ├─main │ ├─java │ ├─resources │ └─webapp │ index.jsp │ └─test ├─java └─resources
修改根目录 build.gradle
配置buildscript
这是定义扩展属性(给脚本用的脚本)
//定义扩展属性(给脚本用的脚本) buildscript { //定义扩展属性(可选) ext { springBootVersion = "1.5.8.RELEASE" } repositories { mavenCentral() maven { url "https://repo.spring.io/plugins-release" } } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") } }
配置allprojects
所有模块共有的配置
// 所有模块都采用统一的版本号以及groupName allprojects { //修改项目属性(可选) group 'com.windcoder' version '1.0-SNAPSHOT' //应用插件 apply plugin: 'java' apply plugin: 'war' apply plugin: 'org.springframework.boot' // JVM 版本号要求 sourceCompatibility = 1.8 targetCompatibility = 1.8 // java编译的时候缺省状态下会因为中文字符而失败 [compileJava,compileTestJava,javadoc]*.options*.encoding = 'UTF-8' // 全局设置依赖配置 configurations { providedRuntime } // 定义仓库 repositories { maven{url 'http://maven.aliyun.com/nexus/content/groups/public/'} maven{url 'https://mvnrepository.com/'} mavenLocal() mavenCentral() } // 定义依赖:声明项目中需要哪些依赖 dependencies { compile fileTree(dir: 'lib', exclude:'', include: '*.jar') } }
配置subprojects
所有子模块公共配置
// 配置所有子模块 subprojects { //指定目录结构 sourceSets { main { java{ srcDir 'src/main/java' } resources { srcDir 'src/main/java' srcDir 'src/main/resources' } } } // 关掉bootRepackage任务 bootRepackage.enabled=false }
配置configure(rootProject)
根模块独有的配置
// 配置根模块 configure(rootProject) { apply plugin: 'eclipse' apply plugin: 'idea' apply plugin: 'maven' bootRepackage.enabled=true // 配置 springBoot { mainClass = "com.windcoder.qycms.QycmsApplication"; buildInfo() } // dependencies { compile project(":qycms-core:system-console") } // 生成war时过滤内嵌tomcat依赖 war { rootSpec.exclude("tomcat-embed*.jar") rootSpec.exclude("javax.servlet-api*.jar") rootSpec.exclude("org.projectlombok:lombok") } }
配置common
build.gradle
common模块用来存放基础的一些配置,比如springBoot的一些jar包等。
apply plugin: 'eclipse-wtp' apply plugin: 'idea' archivesBaseName = "qycms-common" dependencies { compile("org.springframework.boot:spring-boot-starter-web:${springBootVersion}") compile("org.springframework.boot:spring-boot-starter-thymeleaf") }
配置springBoot的mainClass
package com.windcoder.qycms; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.data.jpa.repository.config.EnableJpaAuditing; /** * Description: * User: WindCoder * Date: 2018-03-21 * Time: 23:50 下午 */ @SpringBootApplication public class QycmsApplication { public static void main(String[] args) { SpringApplication.run(QycmsApplication.class,args); } }
配置springBoot配置文件application.properties
此处暂时仅简单的配置一下端口号等
server.port=8000 server.session.timeout=3600 server.session.cookie.http-only=true # 1024 * 1024 * 1024 = 1GB, 默认值是 10485760 = 10M # server.tomcat.max-http-post-size=1073741824 spring.http.multipart.max-file-size=10737418244 spring.http.multipart.max-request-size=10737418244
配置system-provider
build.gradle
引入对common的项目依赖
apply plugin: 'eclipse-wtp' apply plugin: 'idea' dependencies { compile project(':qycms-core:common') }
配置system-console
build.gradle
引入对system-provider的项目依赖
apply plugin: 'eclipse-wtp' apply plugin: 'idea' dependencies { compile project(':qycms-core:system-provider') }
添加测试Controller
package com.windcoder.qycms.core.system; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("api/test") public class TestController { @GetMapping("sayHello") public String sayHello (String name){ return "Hello " + name; } }
配置idea中的springBoot工程启动
主要需要注意配置Use classpath of module选项,要配置成根模块的qycms_main.对于eclipse,需要启动qycms模块。
MainClass要统一为上面的配置configure(rootProject) 中的springBoot 的mainClass一致,即
com.windcoder.qycms.QycmsApplication
运行
到此通过debug或者run来运行测试了.
当出现上图时,便可在浏览器输入http://localhost:8000/api/test/sayHello?name=Lili,查看到如下效果: