Java项目构建工具-gradle

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文件)

配置当前子模块。
文件配置内容介绍:

  1. plugins # 定义一些插件
  2. apply pugins: ‘xxx’ # 使用xxx插件
  3. sourceCompatibility = “1.8” # jdk版本声明
  4. targetCompatinility = “1.8” # jdk版本声明
  5. buildscript # 声明gradle脚本本身需要使用的资源(需要注意的是,在build.gradle文件中,buildscript块和plugin块必须作为前两个块存在,否则会报错的。
  6. repositories # 使用的仓库优先级(点击查看
  7. ext xxxVersion = xx # ext里面就是自定义的一些配置
  8. configurations # 配置参数变量
  9. configure(allprojects) # configure(allprojects) { project ->}表示内部的配置将会应用于所有的项目,在下面还会出现configure(subprojects){},
    其表示 配置的数据将会应用在所有的子项目内,两者的区别主要就是allprojects和subprojects
  10. configure(subprojects) # 所有子项目的通用配置
  11. dependencies # 引入相关Jar包
    implementation(引入相关依赖jar)
      testImplementation(测试时引入的jar包)
      exclude(去除依赖)
  12. test # Web项目中不长会写JunitTest,但也会写。gradle build的时候回执行test 这项task。如果想跳过,通常有几种方法:在build.gradle文件中禁用task
test {
  enable = false
}
  1. 指定项目编码
tasks.withType(JavaCompile) {
options.encoding = "${custom.encoding.OPTIONS}"
}
  1. 添加gradle wrapper包装器(生成gradlew文件,统一gradle版本,避免因为版本不同产生的问题)
task wrapper(type: Wrapper) {
	gradleVersion = "4.8" //这里的版本根据自己的需求变更.
}
  1. 引入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"
}
  1. 屏蔽父项目的构建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'
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值