gradle搭建springboot项目

  1. 使用idea, 新建springboot项目,type 这一栏的由maven 换成gradle project, 其他和maven 项目一样
  2. 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'
			}
		}*/
	}

}


  1. 该项目包含一个core子项目, 创建方式和父项目相同, 子项不需要有settings.gradle文件. 以上配置文件就是gradle搭建多模块的所有配置.
  2. 项目下载地址 www.github.com/hugmount/hellogradle
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值