美文网首页
Gradle第4课:Gradle 基础脚本的实现

Gradle第4课:Gradle 基础脚本的实现

作者: 米饭超人 | 来源:发表于2018-08-28 11:08 被阅读59次

    需要准备

    • 一个熟悉的 IDE 开发工具
    • JDK 7及以上
    • Gradle 3.2以上

    创建一个简单的 HelloWorld 工程

    为了更好演示如何使用 Gradle 脚本来编译我们的工程,我们尽量创造一个非常简单的 java 项目,它只包含一个HelloWorld.java文件。 打开我们熟悉的 IDE 工具,本文件中使用的是 IntelliJ IDEA 14,创建一个 HelloWorld 的工程,创建步聚如下:

    enter image description here enter image description here enter image description here

    接下来一路点下一步,直到最后完成,我们可以看到创建的工程目录结构如下:

    enter image description here

    IDE 工具会自动为我们创建很多配置文件和目录,这是使用 IDE 的好处,不过对于初学者来说,一上来看到这么多文件和目录可能会不知所措。我们可以先把一些文件和目录去掉,等后期熟悉了 Gradle 的使用后,我们再来关注其它相关配置。最后精简的工程目录结构如下(真实项目不需要精简):

    enter image description here

    精简后主要包括三个目录,一个 gradle 配置文件,具体介绍如下:

    • .gradle 目录: 与 Gradle 相关的缓存配置等内容,为隐藏文件夹
    • .idea 目录:与 IDEA 项目工程相关配置内容,为隐藏文件夹
    • src 目录:Java 代码目录
    • build.gradle 配置文件:Gradle 脚本配置文件

    首先我们在 src/main/java/ 目录下包名 com.bill,然后再该包下创建了一个 HelloWorld.java 文件,其中输出打印:Hello world

    package com.bill;
    
    /**
     * Created by Bill on 17/7/14.
     */
    public class HelloWorld {
        public static void main(String[] args) {
            System.out.println("Hello world");
        }
    }
    

    测试 Gradle 脚本

    在 IDEA 工具中,打开 Terminal 终端(也可以直接打开系统终端),输入gradle tasks命令,查看当前工程中可使用的任务有哪些,如下:

    enter image description here

    从图中我们可以看到,IDEA 自动为我们添加了一些默认的任务(后面有讲到如何添加的),具体任务说明如下:

    Build tasks

    assemble - 编译打包该工程内容
    build - 编译打包并测试该工程
    buildDependents - 编译打包并测试该工程和所有依赖它的工程
    buildNeeded - 编译打包并测试该工程和它依赖的所有工程
    classes - 编译打包主要的类文件
    clean - 删除编译目录
    jar - 编译打成 jar 包,这个 jar 包包含主要的类文件
    testClasses - 编译打包测试类文件

    在我们没有写任何 gradle 代码之前,我们可以先来亲自体验一下这些预添加的任务功能,我们选择build任务来编译打包该工程试下,其执行结果如下:

    Gradle-3-1.jpg

    从图中,我们看到只要简单的一行命令,就完成了当前工程的编译打包工作,打包后会自动生成一个 build 文件夹,其目录结构详细介绍如下。

    • classes 目录:存放编译后的类文件,就是 .class 文件
    • dependency-cache:存放相关依赖的缓存数据
    • libs:存放最终编译打好的 jar 包
    • tmp:存放编译过程中的临时文件

    通过 Gradle 的这些任务我们可以很方便的编译打包工程,而以上这些任务又是通过添加插件来轻松实现的,先让我们看看在创建工程时,IDE 工具都为我们自动添加了哪些 gradle 脚本内容?

    group 'com.bill'  // 在图三中设置的group项
    version '1.0-SNAPSHOT' // 在图三中设置的version项
    
    // 第三方插件
    apply plugin: 'java'
    
    // 设置 JDK 版本
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
    
    // 指定maven仓库为maven中央仓库
    repositories {  
        mavenCentral()
    }
    
    // 设置项目的依赖库
    dependencies {
        testCompile group: 'junit', name: 'junit', version: '4.11'
    }
    

    相关各行代码的注释已经很明确了,其中最关键一行为apply plugin: 'java',它告诉 gradle 使用第三方 java 插件,这样我们才能简单的使用gradle build命令来编译打包了,而 gradle 的 java 插件具体包括哪些任务,以及各任务之间的依赖关系,可以参考官网,我在后面的常用插件一章中会具体介绍 ,其关系图如下:

    enter image description here

    再结合之前执行gradle build命令的过程(见图七),我们可以清晰的看到各任务的执行顺序(图八中箭头表明了 build 的调用过程):

    :compileJava
    :processResources UP-TO-DATE
    :classes
    :jar
    :assemble
    :compileTestJava UP-TO-DATE
    :processTestResources UP-TO-DATE
    :testClasses UP-TO-DATE
    :test UP-TO-DATE
    :check UP-TO-DATE
    :build
    

    向 Gradle 中添加依赖库

    接下来我们实现添加一个依赖包,比如使用 Gson 实现对 json 的操作。首先在 maven 仓库 中搜索 Gson,结果如下:

    enter image description here

    把其中compile group: 'com.google.code.gson', name: 'gson', version: '2.8.0'拷贝到 build.gradle 文件中,其完整如下如下:

    group 'com.bill'
    version '1.0-SNAPSHOT'
    
    apply plugin: 'java'
    
    sourceCompatibility = 1.8
    
    repositories {
        mavenCentral()
    }
    
    dependencies {
        compile group: 'com.google.code.gson', name: 'gson', version: '2.8.0'
        testCompile group: 'junit', name: 'junit', version: '4.11'
    }
    

    然后在 HelloWorld.java 中添加如下代码:

    public class HelloWorld {
        public static void main(String[] args) {
            Person p = new Person();
            p.setName("Bill.Yang");
            p.setAge(30);
    
            Gson gson = new GsonBuilder().create();
            String pJson = gson.toJson(p);
    
            System.out.println("Hello world," + pJson);
        }
    }
    

    同时添加 Person.java 类,如下所示:

    public class Person {
        private String name;
        private int age;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }
    

    现在我们再执行gradle build命令,看看编译后的结果是什么样?这次我们可以使用 IDEA 工具的可视化界面来执行 build 命令,如下:

    enter image description here

    编译一切正常,证明我们刚刚加入的依赖库已经被成功的引入工程中了。

    指定 Jar 包的名称

    大多时候,我们希望最后生成的 jar 包是自己指定的名称,而不是使用工程的项目名称,Gradle 为我们提供了如下方式:

    jar {
        baseName = 'first-gradle'
        version =  '0.1.0'
    }
    

    通过jar代码块指定了如何命令 JAR 文件,在本例中它将会被命令为:first-gradle-0.1.0.jar,如下图:

    enter image description here

    使用 Gradle Wrapper 编译项目

    在用 Gradle 编译工程时,使用 Gradle Wrapper 是一种非常好的方式,它为 Windows、OS X和Linux平台都提供了相应的脚本文件,这些脚本使你可以在不同平台的不同 Gradle 版本上正确地执行你的编译打包脚本。我们只需要执行一行命令, Gradle 就会自动为我们的项目添加 Wrapper 相关配置信息,而不需要手动修改任何的代码配置等,其命令如下:

    $ gradle wrapper --gradle-version 3.2
    

    当执行完上面命令后,你会注意到项目中增加了一些新的文件:根目录下的两个脚本文件;一个gradle/wrapper的目录。其结构如下:

    enter image description here

    现在可以使用 Gradle Wrapper 编译我们的工程了,我们也能把 Wrapper 相关的配置信息添加到版本控制系统中,其他任何人克隆了我们的工程也能使用相同的方式编译打包该工程。

    ./gradlew build
    

    小结

    这节通过 Gradle 实现了一个简单的 HelloWorld 工程编译打包任务,在这里你了解到了如何使用 gradle build 来编译项目、如何向工程中添加依赖库、以及如何使用 Gradle Wrapper 编译工程。

    相关文章

      网友评论

          本文标题:Gradle第4课:Gradle 基础脚本的实现

          本文链接:https://www.haomeiwen.com/subject/pyhfwftx.html