`

Gradle学习系列之一——Gradle快速入门

    博客分类:
  • Java
 
阅读更多

这是一个关于Gradle的学习系列,其中包含以下文章:

    1. Gradle快速入门
    2. 创建Task的多种方法
    3. 读懂Gradle语法
    4. 增量式构建
    5. 自定义Property
    6. 使用java Plugin
    7. 依赖管理
    8. 构建多个Project
    9. 自定义Task类型
    10. 自定义Plugin

 

请通过以下方式下载本系列文章的Github示例代码:

git clone https://github.com/davenkin/gradle-learning.git

 

和Maven一样,Gradle只是提供了构建项目的一个框架,真正起作用的是Plugin。Gradle在默认情况下为我们提供了许多常用的Plugin,其中包括有构建Java项目的Plugin,还有War,Ear等。与Maven不同的是,Gradle不提供内建的项目生命周期管理,只是java Plugin向Project中添加了许多Task,这些Task依次执行,为我们营造了一种如同Maven般的项目构建周期。更多有关Maven的知识,读者可以访问Maven官网,或者可以参考笔者写的Maven学习系列文章

 

现在我们都在谈 领域驱动设计 ,Gradle本身的领域对象主要有Project和Task。Project为Task提供了执行上下文,所有的Plugin要么向Project中添加用于配置的Property,要么向Project中添加不同的Task。一个Task表示一个逻辑上较为独立的执行过程,比如编译Java源代码,拷贝文件,打包Jar文件,甚至可以是执行一个系统命令或者调用Ant。另外,一个Task可以读取和设置Project的Property以完成特定的操作。

让我们来看一个最简单的Task,创建一个build.gradle文件,内容如下:

task helloWorld << {
   println "Hello World!"
}

 

这里的“<<”表示向 helloWorld 中加入执行代码——其实就是Groovy代码。Gradle向我们提供了一整套DSL(Domain Specific Language, 领域特定语言),所以在很多时候我们写的代码似乎已经脱离了Groovy,但是在底层依然执行的是Groovy。比如上面的task关键字,其实就是一个Groovy中的方法,而大括号之间的内容则表示传递给task()方法的一个闭包。除了“<<”之外,我们还很多种方式可以定义一个Task,我们将在本系列后续的文章中讲到。

在与build.gradle相同的目录下执行:

gradle helloWorld

 

:helloWorld
Hello World!

BUILD SUCCESSFUL

Total time: 1.891 secs

 

在默认情况下,Gradle将当前目录下的build.gradle文件作为项目的构建文件。在上面的例子中,我们创建了一个名为helloWorld的Task,在执行gradle命令时,我们指定执行这个helloWorld Task。这里的helloWorld是一个DefaultTask类型的对象,这也是定义一个Task时的默认类型,当然我们也可以显式地声明Task的类型,甚至可以自定义一个Task类型(我们将在本系列的后续文章中讲到)。

比如,我们可以定义一个用于文件拷贝的Task:

task copyFile(type: Copy) {
   from 'xml'
   into 'destination'
}

 

以上copyFile将xml文件夹中的所有内容拷贝到destination文件夹中。这里的两个文件夹都是相对于当前Project而言的,即build.gradle文件所在的目录。

Task之间可以存在依赖关系,比如taskA依赖于taskB,那么在执行taskA时,Gradle会先执行taskB,然后再执行taskB。声明Task依赖关系的一种方式是在定义一个Task的时候:

task taskA(dependsOn: taskB) {
   //do something
}

 

Gradle在默认情况下为我们提供了几个常用的Task,比如查看Project的Properties、显示当前Project中定义的所有Tasks等。可以通过一下命令查看Project中所有的Task:

gradle tasks

 

:tasks

------------------------------------------------------------
All tasks runnable from root project
------------------------------------------------------------

Build Setup tasks
-----------------
init - Initializes a new Gradle build. [incubating]
wrapper - Generates Gradle wrapper files. [incubating]

Help tasks
----------
components - Displays the components produced by root project 'gradle'. [incubating]
dependencies - Displays all dependencies declared in root project 'gradle'.
dependencyInsight - Displays the insight into a specific dependency in root project 'gradle'.
help - Displays a help message.
projects - Displays the sub-projects of root project 'gradle'.
properties - Displays the properties of root project 'gradle'.
tasks - Displays the tasks runnable from root project 'gradle'.

Other tasks
-----------
copyFile
helloWorld

To see all tasks and more detail, run with --all.

BUILD SUCCESSFUL

Total time: 2.122 secs

 

可以看到,除了我们自己定义的copyFile和helloWorld之外,Gradle还默认为我们提供了dependencies、projects和properties等Task。dependencies用于显示Project的依赖信息,projects用于显示所有Project,包括根Project和子Project,而properties则用于显示一个Project所包含的所有Property。

在默认情况下,Gradle已经为Project添加了很多Property,我们可以调用以下命令进行查看:

gradle properties

 

:properties

------------------------------------------------------------
Root project
------------------------------------------------------------

allprojects: [root project 'gradle']
ant: org.gradle.api.internal.project.DefaultAntBuilder@37b72ea
antBuilderFactory: org.gradle.api.internal.project.DefaultAntBuilderFactory@cc239ba
artifacts: org.gradle.api.internal.artifacts.dsl.DefaultArtifactHandler_Decorated@7d37f1c
asDynamicObject: org.gradle.api.internal.ExtensibleDynamicObject@69d6a7cd
baseClassLoaderScope: org.gradle.api.internal.initialization.DefaultClassLoaderScope@3162743f
buildDir: H:\Works\TEMP\gradle\build
buildFile: H:\Works\TEMP\gradle\build.gradle
buildScriptSource: org.gradle.groovy.scripts.UriScriptSource@2c708440
buildscript: org.gradle.api.internal.initialization.DefaultScriptHandler@3047254d
childProjects: {}
class: class org.gradle.api.internal.project.DefaultProject_Decorated
classLoaderScope: org.gradle.api.internal.initialization.DefaultClassLoaderScope@6cf31447
components: []
configurationActions: org.gradle.configuration.project.DefaultProjectConfigurationActionContainer@4e92466a
configurations: []
convention: org.gradle.api.internal.plugins.DefaultConvention@66e8997c
copyFile: task ':copyFile'
defaultTasks: []
dependencies: org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler_Decorated@6f0cb5a1
depth: 0
description: null
ext: org.gradle.api.internal.plugins.DefaultExtraPropertiesExtension@1b29d52b
extensions: org.gradle.api.internal.plugins.DefaultConvention@66e8997c
fileOperations: org.gradle.api.internal.file.DefaultFileOperations@47547132
fileResolver: org.gradle.api.internal.file.BaseDirFileResolver@655523dd
gradle: build 'gradle'
group: 
helloWorld: task ':helloWorld'
inheritedScope: org.gradle.api.internal.ExtensibleDynamicObject$InheritedDynamicObject@6f7e336b
logger: org.gradle.api.logging.Logging$LoggerImpl@3a2b2322
logging: org.gradle.logging.internal.DefaultLoggingManager@5e1218b4
modelRegistry: org.gradle.model.internal.registry.DefaultModelRegistry@12958360
module: org.gradle.api.internal.artifacts.ProjectBackedModule@62d0ac62
name: gradle
parent: null
parentIdentifier: null
path: :
plugins: [org.gradle.api.plugins.HelpTasksPlugin@4d7e7435]
processOperations: org.gradle.api.internal.file.DefaultFileOperations@47547132
project: root project 'gradle'
projectDir: H:\Works\TEMP\gradle
projectEvaluationBroadcaster: ProjectEvaluationListener broadcast
projectEvaluator: org.gradle.configuration.project.LifecycleProjectEvaluator@c6e0f32
projectRegistry: org.gradle.api.internal.project.DefaultProjectRegistry@6f3f0fae
properties: {...}
repositories: []
resources: org.gradle.api.internal.resources.DefaultResourceHandler@21a66d45
rootDir: H:\Works\TEMP\gradle
rootProject: root project 'gradle'
scriptHandlerFactory: org.gradle.api.internal.initialization.DefaultScriptHandlerFactory@1f966492
scriptPluginFactory: org.gradle.configuration.DefaultScriptPluginFactory@63fdffcd
serviceRegistryFactory: org.gradle.internal.service.scopes.ProjectScopeServices$5@7428de63
services: ProjectScopeServices
standardOutputCapture: org.gradle.logging.internal.DefaultLoggingManager@5e1218b4
state: project state 'EXECUTED'
status: release
subprojects: []
tasks: [task ':copyFile', task ':helloWorld', task ':properties']
version: unspecified

BUILD SUCCESSFUL

Total time: 2.03 secs

 

在以上Property中,allprojects表示所有的Project,这里只包含一个根Project,在多项目构建中,它将包含多个Project;buildDir表示构建结果的输出目录;我们自己定义的helloWorld和copyFile也成为了Project中的Property。另外,Project还包括用于执行Ant命令的DefaultAntBuilder(Property名为ant)和Project的描述属性description。

 

下一篇文章中,我们将讲到创建Task的多种方法。

来源: http://www.cnblogs.com/CloudTeng/p/3417762.html

 

 

分享到:
评论

相关推荐

    cordova生成android的settings.gradle配置module(csdn)————程序.pdf

    cordova生成android的settings.gradle配置module(csdn)————程序

    手把手带你自定义 Gradle 插件 —— Gradle 系列(2).doc

    手把手带你自定义 Gradle 插件 —— Gradle 系列(2).doc

    Gradle入门之安装

    Gradle入门之安装

    git和gradle入门学习笔记

    啥都不懂可以看看git的安装,gradle的编译注意事项

    Gradle快速下载器

    Gradle快速下载器—— 顾名思义,就是解决下载gradle时出现timout超时/Gradle下载时间长的问题,用于快速下载指定版本的gradle到Gradle目录。 其原理是自动从国内的gradle镜像源下载指定版本的gradle文件,并自动...

    Android Studio gradle系列之gradle-3.3-all.zip

    Android Studio运行项目时出现 Download https://services.gradle.org/distributions/gradle-3.3-all.zip 21 s 147 ms 是因为这个文件处在外网服务器,下载很慢所以... .gradle文件夹的最后一级目录...

    gradle-7.5-all.zip 快速下载

    此版本为gradle-7.5。 Gradle中文版是一个基于JVM的...Gradle中文版操作十分便捷,可以帮助用户快速进行一系列操作,非常好用。Gradle中文版界面清晰明了,运行也十分稳定,有良好的扩展性,是用户开发构建的好帮手。

    用Gradle构建的基于Java的Spring boot入门程序

    本资源仅为整个 Spring Boot 工程,无文档,有一定注释,适合要入门 Gradle 及 Spring Boot 的初学者。可参考此项目搭建 Spring Boot 项目。 另外,本不打算设置资源分,但却最低为 2 分,实属无奈。

    gradle-7.6.1-all.zip 快速下载

    这是Gradle 7.6的第一个补丁发布。它修复了以下问题: 1.测试套件插件的依赖块中不可能有平台依赖 2.增加内存使用量(使用-p选项) 3.工具链下载期间构建gradle本身失败:在内复制文件的权限被拒绝。格拉德/jdks 4.用7.6...

    gradle-4.4-all.zip 快速下载

    Gradle团队很高兴宣布Gradle 4.4。 首先,这个版本的Gradle为IDE用户提供了一些激动人心的改进: 现在支持Visual Studio 2017。请阅读以下详细信息vswhere和VS工具链发现变化如果你打算用Gradle搭配VS 2017。 这...

    gradle-4.4.1-all.zip 快速下载

    Gradle团队很高兴宣布Gradle 4.4.1。 首先,这个版本的Gradle为IDE用户提供了一些激动人心的改进: 现在支持Visual Studio 2017。请阅读以下详细信息vswhere和VS工具链发现变化如果你打算用Gradle搭配VS 2017。 这...

    IDEA中Gradle学习指南.pdf

    IDEA中Gradle学习指南

    gradle深入学习的视频

    需要深入浅出的学习Android studio中的Gradle朋友可前来下载观看。 这个里面是百度云盘的资源链接。

    gradle-2.2-all.zip,gradle-2.3-all.zip等gradle-x.x.x-all.zip一系列离线包

    Android Studio Gradle离线包下载,其中包含:gradle-1.10-all.zip; gradle-1.11-all.zip; gradle-2.0-all.zip; gradle-2.2.1-all.zip; gradle-2.2-all.zip; gradle-2.3-all.zip;gradle-2.10-all.zip; gradle-...

    gradle学习文档

    Gradle是一个基于JVM的构建工具,是一款通用灵活的构建工具,支持maven, Ivy仓库,支持传递性依赖管理,而不需要远程仓库或者是pom.xml和ivy.xml配置文件,基于Groovy,build脚本使用Groovy编写。文档详细说明的...

    groovy 学习gradle学习经典手册

    网络红文 实战gradle,android,java开发人员的必修课

    为什么说 Gradle 是 Android 进阶绕不去的坎 —— Gradle 系列(1).doc

    为什么说 Gradle 是 Android 进阶绕不去的坎 —— Gradle 系列(1).doc

    gradle-8.3-all.zip 快速下载

    Gradle-8.3 此版本支持持久性Java编译器守护进程加速Java编译。格拉德也会用减少依赖关系解析的内存。这种影响是显著的,特别是对于像Android这样的大型构建。 Gradle现在支持在Java 20上运行。 对于Kotlin DSL,...

    gradle入门书

    gradle 学习书籍 ,讲得很详细。包括Gradle in Action和Gradle_Beyond_the_Basics两本。

    gradle-8.4-all.zip 快速下载

    此版本还提供了一种更简单的方法来为特定角色创建依赖关系配置。关于基于JVM的项目的更多改进,请参见下面的完整发行说明。 Kotlin DSL,最近成为新项目的默认DSL,继续得到改进。嵌入在Gradle中的Kotlin版本已经已...

Global site tag (gtag.js) - Google Analytics