- 使用idea, 新建springboot项目,type 这一栏的由maven 换成gradle project, 其他和maven 项目一样
- build.gradle 配置文件内容
// 为什么repositories要声明两次哪?buildscript代码块中的声明与下半部分声明有什么不同?
// buildscript中的声明是gradle脚本自身需要使用的资源。可以声明依赖项、第三方插件、maven仓库地址等
// 而在build.gradle文件中直接声明的依赖项、仓库地址等信息是项目自身需要的资源
// gradle在执行脚本时,会优先执行buildscript代码块中的内容,然后才会执行剩余的build脚本
buildscript {
ext {
springBootVersion = '2.0.6.RELEASE'
}
repositories {
mavenLocal()
maven { url 'http://maven.aliyun.com/nexus/content/groups/public' }
maven { url "https://plugins.gradle.org/m2/" }
mavenCentral()
}
dependencies {
classpath: 'mysql:mysql-connector-java:5.1.36'
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
//--------------------- 主项目配置 start --------------------------------------
plugins {
id 'java'
id 'application'
id 'org.springframework.boot' version '2.0.6.RELEASE'
id 'io.spring.dependency-management' version '1.0.8.RELEASE'
id 'com.github.johnrengelman.shadow' version '2.0.2' //打包需要
}
dependencies {
//引用其他项目
compile project(":core")
}
// 引用其他项目,对应子模块加sourceSets, 不加入则gradle build的时候,找不到引用模块的类
sourceSets {
main {
java {
srcDirs = ['src/main/java', 'core/src/main/java']
}
resources {
srcDir("src/main/resources")
}
}
}
//--------------------- 主项目配置 end --------------------------------------
// 独享配置
project(':core') {
// 一定要引入插件
apply plugin: "war"
// 生成jar包的名字
// archivesBaseName = 'haha'
dependencies {
compile group: 'org.springframework.boot', name: 'spring-boot-starter-mail', version: '2.1.5.RELEASE'
}
}
// Task有doFirst和doLast两个函数, 用于添加最先执行,最后执行的Action,task生命周期, 最先执行 代码块, 再dofirst, dolast
// type可以指定任务类型,Gradle本身提供有 Copy、Delete、Sync, Zip, Jar等
// Sync: 目标目录中所有非复制文件将会被删除
// 在右侧面板tasks中,选择点击才会执行
// 多环境打包
task replace << {
def configHome = "${project.rootDir}/src/main/resources/config"
def intoPath = "${project.rootDir}/src/main/resources/templates"
def env = 'test'
def isProp = project.hasProperty('env')
println('isEnv: ' + isProp)
if (isProp) {
// 命令: gradle clean build -P env=hello -Pv=1.1
// idea中配置参数 argument栏 填写: -P env=hello -Pv=1.1
Map<String ,String> map = project.getProperties()
env = map.get("env")
def v = map.get("v")
println('参数env: ' + env)
println('参数v: ' + v)
}
println('configHome: ' + configHome)
println('intoPath: ' + intoPath)
copy {
from(configHome) {
include '**/*.properties'
// exclude '**/*unsigned.apk', '**/*unaligned.apk'
}
into intoPath
//复制时重命名文件
rename { String fileName ->
fileName.replace('test', env.toString())
}
}
// 该行属于: 代码块, 所以该行打印会最先执行
println '++++++++ 复制文件 +++++++++'
}
// 建立依赖关系: build依赖replace
tasks.findByName('build').dependsOn(replace)
// 强制执行顺序
build.mustRunAfter replace
tasks.build.doFirst {
println '++++++++ build 打包开始 +++++++++'
}
//shadow打包插件需要配置
shadowJar {
mainClassName = 'com.hugmount.hellogradle.HellogradleApplication'
// baseName = 'hugmount'
classifier = null
// version = null
}
jar {
// 是否把主项目打成可运行jar, 使用shadow打包插件, 所以设为false
enabled = false
}
// 子项目统一设置
subprojects{
bootJar {
enabled = false // 默认不需要打可执行jar包
}
}
// allprojects 用于定义所有项目的配置,包括Root Project. 而subprojects是对所有Child Project的配置
allprojects {
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'eclipse'
apply plugin: 'maven-publish'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
sourceCompatibility = 1.8
targetCompatibility = 1.8
group 'com.hugmount'
version '0.0.1-SNAPSHOT'
// java编译的时候缺省状态下会因为中文字符而失败
[compileJava, compileTestJava, javadoc]*.options*.encoding = 'UTF-8'
repositories {
// 按顺序查找加载, 本地-> 阿里-> 中央仓库
mavenLocal()
// 配置代理到阿里的仓库, 否则可能无法下载依赖
maven { url 'http://maven.aliyun.com/nexus/content/groups/public' }
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testCompile group: 'junit', name: 'junit', version: '4.12'
compile group: 'com.alibaba', name: 'fastjson', version: '1.2.45'
compile group: 'net.coobird', name: 'thumbnailator', version: '0.4.8'
compile group: 'net.sourceforge.tess4j', name: 'tess4j', version: '4.3.1'
}
// 构建脚本里引用了maven的发布插件后, 此时gradle的控制台就会出现publishing选项
// 先点击task -> publishing
// 再点击publishToMavenLocal即可发布到本地maven仓库, 发布成功后可以在本地仓库中查找到相应目录
publishing {
publications {
myPublish(MavenPublication){
from components.java
}
}
/*// 如果需要发布到私服上的话,可以配置私服地址
repositories {
maven {
url 'http://example.com'
}
}*/
}
}
- 该项目包含一个core子项目, 创建方式和父项目相同, 子项不需要有settings.gradle文件. 以上配置文件就是gradle搭建多模块的所有配置.
- 项目下载地址 www.github.com/hugmount/hellogradle