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 插件
- The Java Plugin
关于使用 Gradle 构建 Java 项目,已经有了很好的官方文档:tutorial for java projects 和 tutorial for java web projects.
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 结构,因此写到这里。