Gradle 笔记

此文为本人学习笔记,不保证正确性。。如有纰漏,还请指正。

Maven 的配置太啰嗦了,因此想用 Gradle,可不仔细学学的话,用 Gradle 也只会复制粘贴。。
于是注册了 Udacity 的 Gradle 课程: 用 Gradle 构建 Android 和 Java.

Gradle 基础

使用镜像加速

首先需要了解一个基础的 Gradle 项目的构成。在任意一个文件夹中执行gradle init,都会生成下列文件:

.
├── build.gradle  # 当前 Project 的构建脚本
├── gradle
│   └── wrapper                 # Project 特定的 Gradle,这样不同项目可使用不同版本的 Gradle。
│       ├── gradle-wrapper.jar         #    Gradle Wrapper executable JAR
│       └── gradle-wrapper.properties  # Gradle Wrapper configuration properties
├── gradlew  
├── gradlew.bat  # 这两个 shell 脚本,分别是 Unix* 和 Windows 系统上的 Wrapper 执行脚本。
└── settings.gradle  # 配置脚本,用于说明哪些项目参与构建

一般构建,都推荐使用上面标明的 shell 脚本(gradlew 或 gradlew.bat)执行。该脚本使用的是项目独立的 gradle wrapper,可以保证不会因为 gradle 版本问题而构建失败。

此外,如果有经常会变动的属性,或者是敏感信息,(比如安卓app签名密钥库的密码)可以单独保存到gradle.properties文件中,然后在 build.gradle 中使用该属性。(在开源项目中可能会用到)

插件

学了 Gradle基础部分 后,能理解 Gradle 提供了 Task 这样一个抽象层次,我们可以在这个层次上写我们的 Tasks 来构建任何东西。
Gradle 用得最广泛的是在 Java 和 Android 项目上,可这样的项目一般都比较复杂,即使 Gradle 已经提供了很多基础功能,直接从零开始写 build.gradle 仍然会显得很困难。
实际上,Java 项目或者 Android 项目,它们的构建任务,很大部分都是通用的。比如编译、打包、测试等等。因此 Gradle 官方提供了很多有用的插件,这些插件预置了很多通用的 Task 和 Task Types、DSL元素等。使用这些预定义的 Task,构建就显得简单多了。

插件,可以把它类比成 Java 的父类,你的 build.gradle 便相当于插件的子类。

Gradle 插件继承了 Maven 约定优于配置 的哲学,在默认情况下,执行各种任务时会默认你的项目使用标准结构。当然如有需要,你也可以自定义。

Java 插件

Java-library 插件

用于构建 Java Library,一般都打包成 jar 发布。

  • The Java Library Plugin
    该插件基于 Java 插件,通过控制 api 的暴露与否,加快编译速度,隐藏不需要的 api。

依赖管理

测试

打包到 jar

可自定义manifest

构建 web 应用

Building Java Web Applications
war 插件

Multi-Project 的构建

多 Project 的项目结构,是一个根 Project,其内包含多个子 Project。
multi_project_builds

  • allprojects: 所有 Projects 的通用配置
  • subprojects: 和上面的 closure 的差别,在于它不包括根 Project.

此外,经常会发现根 Project 的配置中,repositories closure 出现了两次。分别是在 allprojects 和 buildscript closure 里。
buildscript 声明是gradle脚本自身需要使用的资源。内容包括仓库、依赖、第三方插件等。而上述 closure,设置的是 Project 需要用到的资源。

Android 插件

Android 项目是 Multi-Project 结构,因此写到这里。

posted @ 2018-06-12 18:47  於清樂  阅读(261)  评论(0编辑  收藏  举报