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

本文章基于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,至于为什么,第一篇文章有讲到哦,别忘记了。)

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

可以看到自动生成了各种文件,是不是很熟悉,因为在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 init 可以生成不同的类型的项目,也可以将pom.xml转换为Gradle项目,具体操作可以参考:https://www.cnblogs.com/jun1019/p/6577066.html

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

gradle init --dsl kotlin

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(多个任务可以同时执行 也可以每个任务单独执行,执行完成以后查看目录结构(图六))

图五

图六

3.引用一个插件

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

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文件中的属性配置有关系,还没有实验测试 )

图七

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

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: org.gradle.api.internal.project.DefaultAntBuilder@61f0238a
antBuilderFactory: org.gradle.api.internal.project.DefaultAntBuilderFactory@3f28fba6
archivesBaseName: basic-demo
artifacts: org.gradle.api.internal.artifacts.dsl.DefaultArtifactHandler_Decorated@5f244323
asDynamicObject: DynamicObject for root project 'basic-demo'
assemble: task ':assemble'
baseClassLoaderScope: org.gradle.api.internal.initialization.DefaultClassLoaderScope@1c8014b4
buildDir: C:\Users\xiaxi\Desktop\basic-demo\build
buildFile: C:\Users\xiaxi\Desktop\basic-demo\build.gradle
buildPath: :
buildScriptSource: org.gradle.groovy.scripts.TextResourceScriptSource@7c8c98dd
buildscript: org.gradle.api.internal.initialization.DefaultScriptHandler@481a921
childProjects: {}
class: class org.gradle.api.internal.project.DefaultProject_Decorated
classLoaderScope: org.gradle.api.internal.initialization.DefaultClassLoaderScope@7941dfc9
components: SoftwareComponentInternal set
configurationActions: org.gradle.configuration.project.DefaultProjectConfigurationActionContainer@65f841e1
configurationTargetIdentifier: org.gradle.configuration.ConfigurationTargetIdentifier$1@7daa67f3
configurations: configuration container
convention: org.gradle.api.internal.plugins.DefaultConvention@74eb11c6
copy: task ':copy'
copy1: task ':copy1'
defaultArtifacts: org.gradle.api.internal.plugins.DefaultArtifactPublicationSet_Decorated@3233705
defaultTasks: []
deferredProjectConfiguration: org.gradle.api.internal.project.DeferredProjectConfiguration@24f389c9
dependencies: org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler_Decorated@ac8e75b
depth: 0
description: null
displayName: root project 'basic-demo'
distsDir: C:\Users\xiaxi\Desktop\basic-demo\build\distributions //构建分发的路径 ,和上面zip路径有关系
distsDirName: distributions //分发路径名称
ext: org.gradle.api.internal.plugins.DefaultExtraPropertiesExtension@2681b2e5
extensions: org.gradle.api.internal.plugins.DefaultConvention@74eb11c6
fileOperations: org.gradle.api.internal.file.DefaultFileOperations@3c00222f
fileResolver: org.gradle.api.internal.file.BaseDirFileResolver@40549a7
gradle: build 'basic-demo'
group:
identityPath: :
inheritedScope: org.gradle.api.internal.ExtensibleDynamicObject$InheritedDynamicObject@493a8443
layout: org.gradle.api.internal.file.DefaultProjectLayout@6287111b
libsDir: C:\Users\xiaxi\Desktop\basic-demo\build\libs
libsDirName: libs
logger: org.gradle.internal.logging.slf4j.OutputEventListenerBackedLogger@3f1d1885
logging: org.gradle.internal.logging.services.DefaultLoggingManager@5f2b563e
modelRegistry: org.gradle.model.internal.registry.DefaultModelRegistry@714d740d
modelSchemaStore: org.gradle.model.internal.manage.schema.extract.DefaultModelSchemaStore@37bae470
module: org.gradle.api.internal.artifacts.ProjectBackedModule@848de03
name: basic-demo
normalization: org.gradle.normalization.internal.DefaultInputNormalizationHandler_Decorated@6c48eefb
objects: org.gradle.api.internal.model.DefaultObjectFactory@361d35a0
parent: null
parentIdentifier: null
path: :
pluginManager: org.gradle.api.internal.plugins.DefaultPluginManager_Decorated@33021ffb
plugins: [org.gradle.api.plugins.HelpTasksPlugin@797ddd37, org.gradle.language.base.plugins.LifecycleBasePlugin@2975e88a, org.gradle.api.plugins.BasePlugin@2e1f469]
processOperations: org.gradle.api.internal.file.DefaultFileOperations@3c00222f
project: root project 'basic-demo'
projectConfigurator: org.gradle.api.internal.project.BuildOperationCrossProjectConfigurator@5d0e71a0
projectDir: C:\Users\xiaxi\Desktop\basic-demo
projectEvaluationBroadcaster: ProjectEvaluationListener broadcast
projectEvaluator: org.gradle.configuration.project.LifecycleProjectEvaluator@7ed0403d
projectPath: :
projectRegistry: org.gradle.api.internal.project.DefaultProjectRegistry@78e7c6d5
properties: {...}
providers: org.gradle.api.internal.provider.DefaultProviderFactory@5d560395
repositories: repository container
resourceLoader: org.gradle.internal.resource.transfer.DefaultUriTextResourceLoader@75a8371c
resources: org.gradle.api.internal.resources.DefaultResourceHandler@5b05cb78
rootDir: C:\Users\xiaxi\Desktop\basic-demo
rootProject: root project 'basic-demo'
script: false
scriptHandlerFactory: org.gradle.api.internal.initialization.DefaultScriptHandlerFactory@2728b98d
scriptPluginFactory: org.gradle.configuration.ScriptPluginFactorySelector@61bf12d3
serviceRegistryFactory: org.gradle.internal.service.scopes.ProjectScopeServices$4@559bc92f
services: ProjectScopeServices
standardOutputCapture: org.gradle.internal.logging.services.DefaultLoggingManager@5f2b563e
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的语法编写。请勿忘记。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值