使用Gradle构建springboot多模块项目,并混合groovy开发

idea设置本地gradle

使用Gradle构建springboot多模块项目,并混合groovy开发

打包:

使用Gradle构建springboot多模块项目,并混合groovy开发

build.gradle


//声明gradle脚本自身需要使用的资源,优先执行
buildscript {
ext {
springBootVersion = '2.1.4.RELEASE'
}
repositories {
// 本地maven仓库
mavenLocal()
maven { url = 'http://maven.aliyun.com/nexus/content/groups/public/' }
//和maven*仓库一样的另一个依赖管理仓库,主要是java
jcenter()
}
dependencies {
classpath "org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}"
}
}

// allprojects 所有项目共享的配置
allprojects {
apply plugin: 'idea'
apply plugin: 'java-library'
version = '1.0'
sourceCompatibility = 11
targetCompatibility = 11
}

// subprojects : 所有子模块共享的配置
subprojects {
apply plugin: 'java'
apply plugin: 'org.springframework.boot' //使用springboot插件
apply plugin: 'io.spring.dependency-management' //版本管理插件
apply plugin: 'application' // 识别mainClassName 插件
//如果是多模块项目,需要指定一个程序入口,必须指定,否则无法build,单模块可以不用指定
mainClassName = 'cm.hou.blogweb.BlogWebApplication'
// java编译的时候缺省状态下会因为中文字符而失败
[compileJava, compileTestJava, javadoc]*.options*.encoding = 'UTF-8'
// 配置所有子模块的依赖仓库地址
repositories {
// 本地maven仓库
mavenLocal()
maven { url = 'http://maven.aliyun.com/nexus/content/groups/public/' }
//和maven*仓库一样的另一个依赖管理仓库,主要是java
jcenter()
}
//所有子模块共有依赖
dependencies{
// gradle5.0版本以上引入需要这种形式
compileOnly 'org.projectlombok:lombok:1.18.8'
annotationProcessor 'org.projectlombok:lombok:1.18.8'
implementation 'org.codehaus.groovy:groovy'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
}
 

settings.gradle

// 父项目名称
rootProject.name = 'blog-system'
// 导入子模块
include 'blog-web','blog-service','blog-pojo','blog-dao','blog-admin'

使用api解决多重依赖

dao 模块依赖

dependencies {
    // 使用api 暴露依赖,对其他模块可见,不用重复引用
    api (project(':blog-pojo'))
    api 'mysql:mysql-connector-java:8.0.15'
    api 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.0.1'
    api 'com.zaxxer:HikariCP'  // 连接池
    api 'com.github.pagehelper:pagehelper:5.1.10'
    implementation 'org.springframework.boot:spring-boot-starter'
}

使用api之后,service模块依赖dao模块是, api的依赖是可见的,就不用重复依赖了:

service

dependencies {
    api (project(':blog-dao'))
    implementation 'org.springframework.boot:spring-boot-starter'
}

web模块

// 引入插件新写法
plugins {
    id 'war'
    id 'groovy'
}
//旧写法
//apply plugin : "war"
archivesBaseName = 'blog-web'
/**
 * SourceSets: 指定资源路径
 */
sourceSets.main.java.srcDirs = []
// 指定groovy编译路径,不指定groovy类不会编译
sourceSets.main.groovy.srcDirs += ["src/main/java"]
/**
 * api 用于取代compile(已被废弃)
 * api或compile关键字引用的包对于其他module来说是可见的,
 * implementation关键字引用的包对于其他module来说是不可见的。
 */
dependencies{
    implementation (project(':blog-service'))
    implementation 'org.springframework.boot:spring-boot-starter-web'
    //  打包成war包
    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
}

使用souceSets混合编译java和Groovy

必须添加这个才会编译groovy类

/**
 * SourceSets: 指定资源路径
 */
sourceSets.main.java.srcDirs = []
// 指定groovy编译路径,不指定groovy类不会编译
sourceSets.main.groovy.srcDirs += ["src/main/java"]

项目结构

使用Gradle构建springboot多模块项目,并混合groovy开发

添加lombok

dependencies {
    // guava 工具包
    api 'com.google.guava:guava:27.1-jre'
    // gradle5.0版本以上引入需要这种形式
    compileOnly 'org.projectlombok:lombok:1.18.8'
    annotationProcessor 'org.projectlombok:lombok:1.18.8'
    implementation 'org.springframework.boot:spring-boot-starter'
}

 最后贴上我的Gradle项目: https://gitee.com/houzheng1216/blog_system