以前学maven的时候没看文档,也没看视频,基本上就是玩着玩着玩会的,所以这波我好好写一下Gradle的文档,和大家一起学一下Gradle
Gradle 是一个开源 构建自动化 工具,其设计足够灵活,可以构建几乎任何类型的软件
Gradle 通过只运行那些因为输入或输出发生变化而需要运行的任务来避免不必要的工作。 您还可以使用构建缓存来重用以前运行的任务输出,甚至可以重用来自不同机器(使用共享构建缓存)的任务输出。
Gradle 实现了许多其他优化,开发团队不断努力提高 Gradle 的性能。
Gradle 在 JVM 上运行,您必须安装 Java 开发工具包 (JDK) 才能使用它。 这对于熟悉 Java 平台的用户来说是一个奖励,因为您可以在构建逻辑中使用标准 Java API,例如自定义任务类型和插件。 它还使得在不同平台上运行 Gradle 变得容易。
请注意,Gradle 不仅限于构建 JVM 项目,它甚至还包含对构建本机项目的支持。
Gradle 借鉴了 Maven 的书,通过实现约定使常见类型的项目(例如 Java 项目)易于构建。 应用适当的插件,您就可以轻松地为许多项目提供精简的构建脚本。 但这些约定不会限制您:Gradle 允许您覆盖它们、添加您自己的任务以及对基于约定的构建进行许多其他自定义。
您可以轻松扩展 Gradle 以提供您自己的任务类型,甚至构建模型。 有关此示例,请参阅 Android 构建支持:它添加了许多新的构建概念,例如风味和构建类型。
几个主要的 IDE 允许您导入 Gradle 构建并与之交互:Android Studio、IntelliJ IDEA、Eclipse 和 NetBeans。 Gradle 还支持生成将项目加载到 Visual Studio 所需的解决方案文件。
构建扫描 提供有关构建运行的大量信息,您可以使用这些信息来识别构建问题。 他们特别擅长帮助您识别构建性能的问题。 您还可以与其他人共享构建扫描,如果您需要寻求建议以解决构建问题,这将特别有用。
Gradle 允许您构建任何软件,因为它对您尝试构建的内容或应该如何完成几乎没有假设。 最显着的限制是依赖管理目前仅支持与 Maven 和 Ivy 兼容的存储库和文件系统
这并不意味着您必须做很多工作来创建构建。 Gradle 通过添加一层约定和通过 插件 。 您甚至可以创建和发布自定义插件来封装您自己的约定和构建功能
Gradle 将其构建建模为任务(工作单元)的有向无环图 (DAG),这意味着构建本质上是配置一组任务并将它们连接在一起
所以任务是基于依赖关系以创建DAG的
创建任务图后,Gradle 会确定哪些任务需要以何种顺序运行,然后继续执行它们
几乎任何构建过程都可以通过这种方式建模为任务图,这也是 Gradle 如此灵活的原因之一。 并且该任务图可以由插件和您自己的构建脚本定义,任务通过 任务依赖机制
事实上,以上所有都是可选的,具体取决于任务需要做什么。 某些任务(例如 标准生命周期任务 )甚至没有任何操作。 他们只是为了方便而将多个任务聚合在一起
您选择要运行的任务。 通过指定执行您需要的任务来节省时间,但仅此而已。 如果您只想运行单元测试,请选择执行该任务的任务——通常 test. 如果你想打包一个应用程序,大多数构建都有一个 assemble为此的任务
Gradle 的 增量构建 支持强大且可靠,因此通过避免 clean除非您确实想要执行清洁任务。
为构建设置环境并确定哪些项目将参与其中。
为构建构建和配置任务图,然后根据用户想要运行的任务确定需要运行哪些任务以及以何种顺序运行。
运行在配置阶段结束时选择的任务。
这些阶段构成了Gradle的构建生命周期(Build Lifecycle)
精心设计的构建脚本主要由 声明性配置而不是命令式逻辑 。 该配置在配置阶段进行评估是可以理解的。 即便如此,许多这样的构建也有任务操作——例如通过 doLast {}和 doFirst {}块——在执行阶段被评估。 这很重要,因为在配置阶段评估的代码不会看到在执行阶段发生的变化。
配置阶段的另一个重要方面是 每次构建运行时都会 。 这就是为什么最好 在配置阶段避免昂贵的工作 。 构建扫描 可以帮助您识别此类热点等
如果您可以仅使用与 Gradle 捆绑的构建逻辑来构建项目,那就太好了,但这几乎是不可能的。 大多数构建都有一些特殊要求,这意味着您需要添加自定义构建逻辑
当您希望构建完成一些现有任务无法完成的工作时,您可以简单地编写自己的任务类型。 通常最好将自定义任务类型的源文件放在 buildSrc 目录或打包插件中。 然后,您可以像使用任何 Gradle 提供的任务类型一样使用自定义任务类型。
附加在任务之前或之后执行的自定义构建逻辑 Task.doFirst() 和 Task.doLast() 方法
这些允许您将自己的属性添加到项目或任务中,然后您可以从自己的自定义操作或任何其他构建逻辑中使用这些属性。 额外的属性甚至可以应用于不是由您明确创建的任务,例如由 Gradle 的核心插件创建的任务。
约定是简化构建的有效方式,使用户可以更轻松地理解和使用它们。 这可以在使用标准项目结构和命名约定的构建中看到,例如 Java 构建 。 您可以编写自己的插件来提供约定——它们只需要为构建的相关方面配置默认值。
Gradle 允许您将新概念引入构建中,而不仅仅是任务、文件和依赖项配置。 您可以在大多数语言插件中看到这一点,它们将 源集 到构建中。 构建过程的适当建模可以极大地提高构建的易用性和效率。
将 Gradle 的构建脚本视为可执行代码很容易,因为它们就是这样。 但这是一个实现细节:精心设计的构建脚本描述 了 构建软件所需的步骤,而不是 。 这些步骤应该如何完成工作 这是自定义任务类型和插件的工作
有一个普遍的误解认为 Gradle 的强大和灵活性来自于它的构建脚本是代码这一事实。 这与事实相去甚远。 提供功能的是底层模型和 API。 正如我们在最佳实践中建议的那样,您应该 避免在构建脚本中放置太多(如果有的话)命令式逻辑
然而,在一个领域将构建脚本视为可执行代码很有用:了解构建脚本的语法如何映射到 Gradle 的 API。 API 文档——由 Groovy DSL Reference 和 Javadocs ——列出了方法和属性,并提到了闭包和操作。 这些在构建脚本的上下文中意味着什么? 查看 Groovy Build Script Primer 以了解该问题的答案,以便您可以有效地使用 API 文档
由于 Gradle 在 JVM 上运行,构建脚本也可以使用标准 Java API
使用 Gradle Wrapper 是升级 Gradle 的推荐方式
完整下载
我们需要将gradle配置为环境变量
%GRADLE_HOME%\bin
cmd中输入gradle -v
进行查看
如果你有maven,你可以直接指定到maven的本地库,或你可以直接指定位置
mkdir first
cd .\first\
gradle init
如上放截图可见
如下通过tree命令,我们可以看到项目结构,可见和maven是一样的
进入设置搜索gradle修改目录
以下为第一次构建完成
完成