已复制
全屏展示
复制代码

项目构建工具Gradle快速入门


· 5 min read

一. 创建项目

首次创建,idea 会下载 gradle 工具。

二. 目录结构介绍

  • gradle 目录: 存放 gradle wrapper 相关文件,gradle wrapper 是 gradle 项目构建工具,它能在本地没有 gradle 的情况下,从远程下载 gradle 并自动解压缩以构建项目,自动管理 gradle 版本。gradle-wrapper.properties 是 gradle wrapper的配置。distributionUrl 指定本地没有配置 gradle 的情况下从哪下载gradle,distributionBase 指定 gradle 下载和缓存 jar 的根目录,默认用户目录。在实际使用中我们一般不直接使用 gradle,而是使用 gradle wrapper,而对于 idea 而言我们可以不去关心两者区别,idea 的 gradle 环境是基于 gradle wrapper 的。
  • build.gradle:相当于 maven 里面的 pom.xml
  • sourceCompatibility:指定编译 .java 文件的 jdk 版本
  • plugins:插件配置;格式为id «plugin id» version «plugin version» [apply «false»] Gradle 的核心插件只需提供id的简称就可以
  • repositories:仓库配置,mavenCentral() 代表中央仓库,你也可以用maven{url '<url>'}的方式添加一个仓库
  • dependencies:依赖的坐标集合
  • setting.gradle:用于多模块的配置

三. Gradle依赖

如下格式的 dependency 复制到Gradle里面后,会自动修改格式,比如

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>${slf4j.version}</version>
</dependency>

自动变成

dependencies {
    compile 'org.slf4j:slf4j-api:${slf4j.version}'
}

在 gradle 中,项目依赖的格式为:  作用范修饰符 'groupId:artifactId:version',作用范围修饰符包括:

  • complie:编译范围依赖在所有的 classpath 中可用,同时它们也会被打包,这个是最常用的
  • runtime:runtime 依赖在运行和测试系统的时候需要,但在编译的时候不需要。
  • testComplie:测试期编译需要的附加依赖
  • testRuntime:测试运行期需要

四. Gradle打包

和在 idea 中使用 maven 一样,点击右侧 gradle 标签可看到上图相关 gradle 的操作,build 对应的是 ./gradlew build 命令;双击运行 build 会生成一个 build 文件夹 ,class 文件和 jar 包都在里面。

五. Groovy基础

学习 Groovy 的目的是为了更好的使用 Gradle,这里是非常基础的用法,打开 Groovy 的 console 直接运行 Groovy 脚本。

Groovy是一种与 Java类似,完全支持 Java 语法、基于 JVM 的编程语言,主要用于写脚本,我们的 Gradle 的脚本就是 Groovy 语言写的。

点击运行图标,或者快捷键:Command + Enter运行:

  • Groovy 基础
// 定义变量 相当于var 弱类型
def i = 15
println(i)

def s = "hello"
println s

// 集合定义
def list = ['s', 'a']

// 添加元素
list << 'c'

// 取出 元素
println list.get(0)
println list.get(0)

// map定义
def map = ['key': 'value']
println map.get('key')

// map添元素
map.test = 'add'
println map.get('test')
  • Groovy 闭包
// 闭包: 相当于函数式编程
def close1 = {
    println "你好"
}

// 方法定义
def test(Closure closure) {
    closure()
}

//使用闭包
test(close1)

// 带参闭包
def close2 = {
    v -> println v + v + v
}

def test2(Closure closure) {
    closure("s")
}

//使用带参闭包
test2(close2)

// 占位符
def close3 = {
    v -> println("test $v ")
}

test2(close3)

// 结果如下
你好
sss
test s 

六. Gradle多模块

  • 在 idea 中构建多模块很简单,和 maven 操作一样,但项目结构有所不同。在父模块中有一个 settings.gradle 文件,指定了子模块包含哪些,而需要继承给子模块的东西需要在父模块 build.gradle 中配置 subprojects 闭包。
  • 假设我的代码都在子项目中(假设有 common、service 两个子项目),删除根项目下的 src 目录。
  • 步骤:在根目录 gradlejava 文件夹右键选择 New -> Module -> Gradle -> Java, 指定子模块 ArtifactId 名称,依次添加 common 模块和 service 模块后,gradle 相关的目录结构就建好了。
  • 创建 common 模块的工具类 org.yuchaoshui.CustomFileHandler
  • 创建主类  org.example.Main
  • 主类的 build.gradle 中添加对 common 模块的依赖
plugins {
    id 'java'
}

group 'org.example'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    compile project(":common")
}
  • 运行项目
🔗

文章推荐