欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

重新认识Gradle(二)-开始一个新的Gradle构建 ,创建一个任务

程序员文章站 2022-03-26 18:23:35
...

本文章基于Gradle4.6学习

本文会学到什么?
1.如何开始一个新的Gradle项目
2.如何创建一个Gradle Task。
3.其他细节有用的知识

1.创建一个新的Gradle项目

平时我们都是在Android项目中使用gradle命令,相信很多同学基本上很少去手写Gradle命令 执行一些响应的命令。因为AndroidStudio帮我们做了很多,比如自动gradle bulid 自动gradle clean,其实可以在Android Studio界面上可以看到 有很多为我们提供的预制的gradle命令,任务,都可以用gradle 任务名 妻执行对应的任务。(比如下图的 gradle build ,gradle clean, gradle cleanBuildCache等任务。当然还是推荐使用gradle包装去执行,使用gradlew,至于为什么,第一篇文章有讲到哦,别忘记了。)
重新认识Gradle(二)-开始一个新的Gradle构建 ,创建一个任务

步骤
1.新建一个文件夹 basic-demo
2.进入到该文件夹路径下
3.执行gradle init 可以看到生成如下文件

重新认识Gradle(二)-开始一个新的Gradle构建 ,创建一个任务

重新认识Gradle(二)-开始一个新的Gradle构建 ,创建一个任务

可以看到自动生成了各种文件,是不是很熟悉,因为在Android项目中也存在这些目录文件。那么现在就解释下各个的作用是什么。

├── build.gradle  //1 当前项目配置的脚本配置 比如一些task 
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar  //2 执行gradle包装的一个jar包
│       └── gradle-wrapper.properties  //3
├── gradlew  //4
├── gradlew.bat  //5 gradlew 包装类的 批处理命令。 打开文件可以看到下图-图3 (实际由上面的jar包执行 这里提供的批处理命令)
└── settings.gradle  //6 setting配置文件,用于配置哪些项目参与构建 比如我们Android项目中有其他module的话 就会app ,moduleName1,moduleName2,可以看下这里的配置(图四)

图三

重新认识Gradle(二)-开始一个新的Gradle构建 ,创建一个任务

图四

重新认识Gradle(二)-开始一个新的Gradle构建 ,创建一个任务

小提示:gradle init 可以生成不同的类型的项目,也可以将pom.xml转换为Gradle项目,具体操作可以参考:https://www.cnblogs.com/jun1019/p/6577066.html

补充: 请记得,现在gradle已经支持kotlin语法。所以可以创建kotlin类型的dsl语法 使用

gradle init --dsl kotlin

重新认识Gradle(二)-开始一个新的Gradle构建 ,创建一个任务

重新认识Gradle(二)-开始一个新的Gradle构建 ,创建一个任务

2.创建一个Task任务

这里简单创建一个任务 文件拷贝 ,将文件从一个地方拷贝到另一个地方。

步骤
1.打开刚才创建的build.gradle
2.创建一个文件夹 src ,src文件夹中随意放一些文件数据
3.创建一个copy1 copy2任务 如下:

task copy(type:Copy,group:"test group",description:"test description "){
from "src"
into "dest"
}

task copy1(type:Copy,group:"test group",description:"test description "){
    from "src"
    into "dest2"
}

上面的2个任务分别会将src中的数据复制到dest和dest2中 ,这里的dest文件夹并不需要创建,执行任务的时候回自动帮我们处理。接着我们执行以下看看

gradle tasks  (查看下面图五)

这里可以看见我们创建的2个task 也可以很明确的明白了上面定义的group 和description的含义  

group:将一组任务分类放在一起

description:任务的一个详细描述

图五中也可以看到,还有默认help tasks任务组 里面包含了若干任务。 刚才我们也执行了 gradlew tasks任务查看我们项目中存在的task list

4.然后执行gradlew copy copy1(多个任务可以同时执行 也可以每个任务单独执行,执行完成以后查看目录结构(图六))

图五
重新认识Gradle(二)-开始一个新的Gradle构建 ,创建一个任务

图六
重新认识Gradle(二)-开始一个新的Gradle构建 ,创建一个任务

3.引用一个插件

1.gradle提供了很多插件 http://plugins.gradle.org/ 可以在此网站查看获取。这里自己也实际操作了一次 引入的插件是:https://plugins.gradle.org/plugin/serg.chuprin.iconlabel ,该插件的作用是什么呢,就是可以根据不同的bulid type 在你原有的图标上添加一些属性识别,比如debug版本表示,版本号标识,还是挺实用的 看看实际效果图,图上标识了debug类型,1.0版本。具体的引用操作提供的网站上有这里就不详细解说了。

重新认识Gradle(二)-开始一个新的Gradle构建 ,创建一个任务

2.接下来进入我们的问题,如何引用一个插件

步骤
1.需要使用plugins语法引用需要引用的插件 注意的是  plugins { id "xxxx"} 一定要是在顶部,如果在中间则会报错不能识别
demo

build.gradle 

plugins {
    id "base"
}

task zip(type:Zip,group:"zip group",description:"test zip"){
from "src"
setArchiveName "base-demo-1.0.zip"
}

解读:

1.首先这里使用plugins 引用了一个插件id base的基础插件(我认为这应该自带的默认的一个插件,不用引用也可以使用Zip功能)
2.新建了一个zip的任务 ,将src中的文件 压缩的一个名字为base-demo-1.0.zip的zip压缩包。
3.执行gradlew zip 查看效果(图七)
4.能够看到生成创建的文件在\basic-demo\build\distributions\ 这个目录下,(目前还没明白,可能是因为 gradlerapper.properties文件中的属性配置有关系,还没有实验测试 )

图七
重新认识Gradle(二)-开始一个新的Gradle构建 ,创建一个任务

从上图中可以看到压缩打包成功。插件成功引用

C:\Users\xiaxi\Desktop\basic-demo>C:\Users\xiaxi\Desktop\basic-demo\gradlew.bat zip

BUILD SUCCESSFUL in 0s
1 actionable task: 1 up-to-date

4.补充(重要):

通过 [https://docs.gradle.org/4.10-rc-2/userguide/command_line_interface.html](https://docs.gradle.org/4.10-rc-2/userguide/command_line_interface.html "https://docs.gradle.org/4.10-rc-2/userguide/command_line_interface.html") 这里可以获取更多的gradle 完整的命令

如通过gradle task , gradle properties 可以查看关于gradle对应定义的一些属性值 包括自己在gradle.properties文件中定义的属性值。
例如:执行 gradle properties 如下结果显示

allprojects: [root project 'basic-demo']
allprojects: [root project 'basic-demo']
ant: aaa@qq.com
antBuilderFactory: aaa@qq.com6
archivesBaseName: basic-demo
artifacts: org.gradle.api.internal.artifacts.dsl.DefaultArtifactHandler_Decoraaa@qq.com
asDynamicObject: DynamicObject for root project 'basic-demo'
assemble: task ':assemble'
baseClassLoaderScope: aaa@qq.comc8014b4
buildDir: C:\Users\xiaxi\Desktop\basic-demo\build
buildFile: C:\Users\xiaxi\Desktop\basic-demo\build.gradle
buildPath: :
buildScriptSource: aaa@qq.com
buildscript: aaa@qq.com921
childProjects: {}
class: class org.gradle.api.internal.project.DefaultProject_Decorated
classLoaderScope: aaa@qq.com941dfc9
components: SoftwareComponentInternal set
configurationActions: org.gradle.caaa@qq.com65f841e1
configurationTargetIdentifier: aaa@qq.com3
configurations: configuration container
convention: aaa@qq.com
copy: task ':copy'
copy1: task ':copy1'
defaultArtifacts: org.gradaaa@qq.com3233705
defaultTasks: []
deferredProjectConfiguration: aaa@qq.com389c9
dependencies: org.gradle.api.internaaaa@qq.comac8e75b
depth: 0
description: null
displayName: root project 'basic-demo'
distsDir: C:\Users\xiaxi\Desktop\basic-demo\build\distributions //构建分发的路径 ,和上面zip路径有关系
distsDirName: distributions //分发路径名称
ext: aaa@qq.com2681b2e5
extensions: aaa@qq.com
fileOperations: aaa@qq.com
fileResolver: aaa@qq.com
gradle: build 'basic-demo'
group:
identityPath: :
inheritedScope: org.graaaa@qq.com493a8443
layout: aaa@qq.com
libsDir: C:\Users\xiaxi\Desktop\basic-demo\build\libs
libsDirName: libs
logger: oraaa@qq.com3f1d1885
logging: aaa@qq.com63e
modelRegistry: aaa@qq.com
modelSchemaStore: org.gradaaa@qq.com37bae470
module: aaa@qq.com
name: basic-demo
normalization: org.gradle.noaaa@qq.com6c48eefb
objects: aaa@qq.com
parent: null
parentIdentifier: null
path: :
pluginManager: aaa@qq.com3021ffb
plugins: [aaa@qq.com, aaa@qq.com, aaa@qq.com]
processOperations: aaa@qq.com
project: root project 'basic-demo'
projectConfigurator: org.graaaa@qq.com5d0e71a0
projectDir: C:\Users\xiaxi\Desktop\basic-demo
projectEvaluationBroadcaster: ProjectEvaluationListener broadcast
projectEvaluator: aaa@qq.com03d
projectPath: :
projectRegistry: aaa@qq.com
properties: {...}
providers: aaa@qq.com
repositories: repository container
resourceLoader: orgaaa@qq.com75a8371c
resources: aaa@qq.com8
rootDir: C:\Users\xiaxi\Desktop\basic-demo
rootProject: root project 'basic-demo'
script: false
scriptHandlerFactory: orgaaa@qq.com2728b98d
scriptPluginFactory: aaa@qq.com
serviceRegistryFactory: aaa@qq.com2f
services: ProjectScopeServices
standardOutputCapture: aaa@qq.com63e
state: project state 'EXECUTED'
status: integration
subprojects: []
tasks: task set
version: unspecified
versionCode: 1000 //自己创建的一个gradle.properties 里面定义了属性 versionCode=1000 所以这里有该值显示
zip: task ':zip'

5.结尾:

从上到下,基本上学习了

1.创建一个新的gradle项目
2.创建一个task任务
3.引用插件
4.一些其他功能补充关于gradle其他命令

6.最后

请大家记得上面的所有写的代码语法都支持kotlin dsl的语法编写。请勿忘记。
相关标签: gradle