gradle介绍
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。 面向Java应用为主。当前其支持的语言限于Java、Groovy和Scala,计划未来将支持更多的语言。
gradle功能
- 按约定声明构建和建设;
- 强大的支持多工程的构建;
- 强大的依赖管理(基于Apache lvy),提供最大的便利去构建工程;
- 全力支持已有的Maven或者lvy仓库基础建设;
- 支持传递性依赖管理,在不需要远程仓库和pom.xml和ivy配置文件的前提下;
- 基于groovy脚本构建,其build脚本使用groovy语言编写;
- 具有广泛的领域模型支持构建;
- 深度API;
- 易迁移;
- 自由和开放源码,Gradle是一个开源项目,基于ASL许可;
gradle安装
网上教程很多,基本安装方式和maven一样,下载压缩包-》解压后配置环境变量-》进入dos窗口输入gradle -v命令验证安装是否成功。
构建基础
gradle基本概念
projects(项目)
任何一个Gradle构建都是由一个project或多个projects组成。每个project可以是一个jar包或者一个应用,它也可以是一个由许多其他项目中产生的jar构成的zip压缩包。每个project都由多个tasks组成。
tasks(任务)
每个tasks都代表了构建执行过程中的一个原子性操作。如编译、打包、生成javadoc,发布到某个仓库等操作。
构建脚本
这是包含构建项目的任务的脚本。
gradle中各个文件介绍
setting.gradle
放置module,要把所有的module都罗列在这里。类似于maven的maven多模块的使用。是用来管理多项目的。
例如:
include ':demo', 'Lmylibrary'
build.gradle(project的gradle文件)
这是整个工程的设置文件,一个工程只有一个,在这里设置后所有的module都适用。也就是构建项目的公共配置。
build.gradle(每个module的gradle文件)
配置当前子模块。
文件配置内容介绍:
- plugins # 定义一些插件
- apply pugins: ‘xxx’ # 使用xxx插件
- sourceCompatibility = “1.8” # jdk版本声明
- targetCompatinility = “1.8” # jdk版本声明
- buildscript # 声明gradle脚本本身需要使用的资源(需要注意的是,在build.gradle文件中,buildscript块和plugin块必须作为前两个块存在,否则会报错的。)
- repositories # 使用的仓库优先级(点击查看)
- ext xxxVersion = xx # ext里面就是自定义的一些配置
- configurations # 配置参数变量
- configure(allprojects) # configure(allprojects) { project ->}表示内部的配置将会应用于所有的项目,在下面还会出现configure(subprojects){},
其表示 配置的数据将会应用在所有的子项目内,两者的区别主要就是allprojects和subprojects - configure(subprojects) # 所有子项目的通用配置
- dependencies # 引入相关Jar包
implementation(引入相关依赖jar)
testImplementation(测试时引入的jar包)
exclude(去除依赖) - test # Web项目中不长会写JunitTest,但也会写。gradle build的时候回执行test 这项task。如果想跳过,通常有几种方法:在build.gradle文件中禁用task
test {
enable = false
}
- 指定项目编码
tasks.withType(JavaCompile) {
options.encoding = "${custom.encoding.OPTIONS}"
}
- 添加gradle wrapper包装器(生成gradlew文件,统一gradle版本,避免因为版本不同产生的问题)
task wrapper(type: Wrapper) {
gradleVersion = "4.8" //这里的版本根据自己的需求变更.
}
- 引入jar包依赖管理插件,统一管理所有项目的依赖,来尽量避免jar包冲突的问题
plugins {
id 'org.springframework.boot' version '2.0.1.RELEASE' //spring提供的spring boot插件,主要用到了其依赖管理的功能.
}
然后在configure(allprojects) { project ->...}代码块的apply代码区域新增:
apply plugin: 'org.springframework.boot' //spring boot插件
apply plugin: 'io.spring.dependency-management' //实现maven的依赖统一管理功能
并在顶部添加:
import org.springframework.boot.gradle.plugin.SpringBootPlugin
// 使用该插件完成依赖管理的功能
jar {
enabled = true
}
bootJar {
launchScript()
archiveName = "${project.group}_${project.name}_${project.version}.jar"
}
- 屏蔽父项目的构建jar包功能(因为父项目不提供具体的业务,所以也就不需要打成jar包了,在父项目/build.gradle的底部加入下列代码.)
/**
* 关闭父项目的打包功能
*/
bootJar{
enabled=false
}
/**
* 关闭父项目的打包功能
*/
jar{
enabled=false
}
gradle.properties文件
主要作用是为gradle在运行期间提供一些参数
详细可以看官网介绍:点击查看
将spring boot项目打成war包
主要需要添加war插件,然后正常执行打包命令就可以了。
build.gradle文件修改
dependencies{
providedCompile 'org.springframework.boot:spring-boot-starter-tomcat'
}
spring boot启动类修改
@SpringBootApplication
public class App extends SpringBootServletInitializer{
public static void main(String[] args){
SpringApplication.run(App.class, args);
}
protected SpringApplicationBuilder configure(SpringApplicationBuilder app){
return app.sources(App.class)
}
}
依赖管理
导入依赖
compile/api/implementation导入的依赖都是编译期与运行期都会提供的(打进制品中)
- compile:从仓库里下载并编译,支持依赖传递(属性:transitive = false,关闭依赖传递)
- api:新语法,等同compile
- implementation:新语法,与api相比不支持传递依赖,减少循环编译优化效率
屏蔽依赖
- providedCompile:编译期参与编译,运行期不提供(但生成的war包中,会将这些依赖打入WEB-INF/lib-provided中)
- providedRuntime:不参与编译但运行期需要,比如 mysql 驱动包,如果在代码里用到了此依赖则编译失败
测试期依赖
- testCompile:测试期编译,非测试期不编译
- testImplementation:与implementation相同,仅是测试周期的
排除依赖
exclude:排除指定 group module的模块
- 引入依赖时屏蔽
dependencies {
compile ('org.springframework.boot:spring-boot-starter-web'){
exclude group:'org.springframework.boot',module:'spring-boot-starter-logging'
}
}
- 全局屏蔽
configurations.all {
exclude group:'org.springframework.boot', module:'spring-boot-starter-logging'
}
或
configurations {
all*.exclude group:'org.springframework.boot',module:'spring-boot-starter-logging'
}
依赖管理
dependencyManagement:统一多模块依赖版本
- 可以在里边定义 dependencies 块,指定依赖版本
dependencyManagement {
dependencies {
api 'mysql:mysql-connector-java:5.1.39'
}
}
- 可以引入BOM,类似引入Maven的parent
dependencyManagement {
imports {
mavenBom 'io.spring.platform:platform-bom:1.1.1.RELEASE'
}
}