Gradle探索之路(一)

首先我们要安装gradle并配置环境变量,参考官网
https://docs.gradle.org/current/userguide/installation.html

1.首先新建目录

mkdir basic-demo
cd basic-demo
gradle init

然后可以查看到basic-demo目录下生成了如下文件

build.gradle  gradle/  gradlew*  gradlew.bat  settings.gradle

我们想要完成拷贝文件夹的task,所以可以在当前目录下新建一个src文件夹,然后在该文件夹下touch一个文件myFile.txt,然后打开build.gradle,构建一个task任务,
build.gradle

task copy(type:Copy,group:"Custom",description:"Copies source to the dest directory"){
    from "src"
    into "dest"
}

目标是将src文件夹下的myFile.txt拷贝到dest文件夹,当然dest是自动生成的
task编写完成后即可执行该任务

gradle copy

执行成功后我们看下目录结构

F:\gradledemo\basic-demo>ls
build.gradle  dest/  gradle/  gradlew*  gradlew.bat  settings.gradle  src/

果然生成了dest文件夹,进入我们可查看到myFile.txt文件,说明这个task完成了拷贝文件的任务

压缩文件
首先需要add base plugin to your build script file ,base插件一定要放到.gradle文件头部

plugins {
    id "base"
}
task zip(type:Zip, group: "Archive", description: "Archives sources in a zip file") {
    from "src"
    archiveFileName = "basic-demo-1.0.zip"
}

然后即可看到build/distributions目录下生成了我们压缩的文件

F:\gradledemo\basic-demo\build\distributions>ls
basic-demo-1.0.zip

Gradle还提供了基于构建的丰富的基于Web的视图,称为构建扫描,通过--scan

image.png

gradle zip --scan
F:\gradledemo\basic-demo>gradle zip --scan

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

Publishing a build scan to scans.gradle.com requires accepting the Gradle Terms of Service defined at https://gradle.com/terms-of-service. Do you accept these terms? [yes, no] ye
Please enter 'yes' or 'no': yes

Gradle Terms of Service accepted.

Publishing build scan...
https://gradle.com/s/ga3kzf23dvrjw

attempt to call a nil value
F:\gradledemo\basic-demo>

https://gradle.com/s/ga3kzf23dvrjw这个地址就是我们构建zip Task的基于web的视图
通过浏览构建扫描,则应该能够轻松找出执行了哪些任务,花费了多长时间,应用了哪些插件等等

Gradle构建属性

gradle properties
F:\gradledemo\basic-demo>gradle properties

> Task :properties

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

allprojects: [root project 'zzl_demo']
ant: org.gradle.api.internal.project.DefaultAntBuilder@bc47d9f
antBuilderFactory: org.gradle.api.internal.project.DefaultAntBuilderFactory@66545860
archivesBaseName: zzl_demo
artifacts: org.gradle.api.internal.artifacts.dsl.DefaultArtifactHandler_Decorated@60073ba0
asDynamicObject: DynamicObject for root project 'zzl_demo'
baseClassLoaderScope: org.gradle.api.internal.initialization.DefaultClassLoaderScope@2e4882a9
buildDir: F:\gradledemo\basic-demo\build
buildFile: F:\gradledemo\basic-demo\build.gradle
buildPath: :
buildScriptSource: org.gradle.groovy.scripts.TextResourceScriptSource@6c83a7a
buildscript: org.gradle.api.internal.initialization.DefaultScriptHandler@429bf59b
childProjects: {}
class: class org.gradle.api.internal.project.DefaultProject_Decorated
classLoaderScope: org.gradle.api.internal.initialization.DefaultClassLoaderScope@1b980c53
components: SoftwareComponentInternal set
configurationActions: org.gradle.configuration.project.DefaultProjectConfigurationActionContainer@712f9843
configurationTargetIdentifier: org.gradle.configuration.ConfigurationTargetIdentifier$1@367377f6
configurations: configuration container
convention: org.gradle.api.internal.plugins.DefaultConvention@2b597b8e
copy: task ':copy'
defaultArtifacts: org.gradle.api.internal.plugins.DefaultArtifactPublicationSet_Decorated@70780022
defaultTasks: []
deferredProjectConfiguration: org.gradle.api.internal.project.DeferredProjectConfiguration@7d1863ee
dependencies: org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler_Decorated@50f9777c
dependencyLocking: org.gradle.internal.locking.DefaultDependencyLockingHandler_Decorated@301ce3e6
depth: 0
description: null
displayName: root project 'zzl_demo'
distsDir: F:\gradledemo\basic-demo\build\distributions
distsDirName: distributions
ext: org.gradle.internal.extensibility.DefaultExtraPropertiesExtension@d59cd7
extensions: org.gradle.api.internal.plugins.DefaultConvention@2b597b8e
fileOperations: org.gradle.api.internal.file.DefaultFileOperations@3eec8830
fileResolver: org.gradle.api.internal.file.BaseDirFileResolver@25b55a06
gradle: build 'zzl_demo'
group:
identityPath: :
inheritedScope: org.gradle.internal.extensibility.ExtensibleDynamicObject$InheritedDynamicObject@72e18e85
layout: org.gradle.api.internal.file.DefaultProjectLayout@5e7e972a
libsDir: F:\gradledemo\basic-demo\build\libs
libsDirName: libs
listenerBuildOperationDecorator: org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator@48929dd logger: org.gradle.internal.logging.slf4j.OutputEventListenerBackedLogger@b633620
logging: org.gradle.internal.logging.services.DefaultLoggingManager@7588046f
modelRegistry: org.gradle.model.internal.registry.DefaultModelRegistry@5f650a33
modelSchemaStore: org.gradle.model.internal.manage.schema.extract.DefaultModelSchemaStore@126f07c3
module: org.gradle.api.internal.artifacts.ProjectBackedModule@1715fd56
mutationState: project :
name: zzl_demo
normalization: org.gradle.normalization.internal.DefaultInputNormalizationHandler_Decorated@aff198
objects: org.gradle.api.internal.model.DefaultObjectFactory@3531369e
parent: null
parentIdentifier: null
path: :
pluginManager: org.gradle.api.internal.plugins.DefaultPluginManager_Decorated@42728699
plugins: [org.gradle.buildinit.plugins.BuildInitPlugin@28c9d00b, org.gradle.buildinit.plugins.WrapperPlugin@5715c7bb, org.gradle.api.plugins.HelpTasksPlugin@6bac9e01, org.gradle.language.base.plugins.LifecycleBasePlugin@3dbc8ba3, org.gradle.api.plugins.BasePlugin@5b935d97]
processOperations: org.gradle.process.internal.DefaultExecActionFactory$DecoratingExecActionFactory@22c27141
project: root project 'zzl_demo'
projectConfigurator: org.gradle.api.internal.project.BuildOperationCrossProjectConfigurator@2d11af8e
projectDir: F:\gradledemo\basic-demo
projectEvaluationBroadcaster: ProjectEvaluationListener broadcast
projectEvaluator: org.gradle.configuration.project.LifecycleProjectEvaluator@74a9d81c
projectPath: :
projectRegistry: org.gradle.api.internal.project.DefaultProjectRegistry@35974cfb
properties: {...}
providers: org.gradle.api.internal.provider.DefaultProviderFactory@46e7b71
publicType: org.gradle.api.plugins.BasePluginConvention
repositories: repository container
resourceLoader: org.gradle.internal.resource.transfer.DefaultUriTextResourceLoader@24a3d9ad
resources: org.gradle.api.internal.resources.DefaultResourceHandler@1ef08c1d
rootDir: F:\gradledemo\basic-demo
rootProject: root project 'zzl_demo'
script: false
scriptHandlerFactory: org.gradle.api.internal.initialization.DefaultScriptHandlerFactory@118febac
scriptPluginFactory: org.gradle.configuration.ScriptPluginFactorySelector@66cdbf1f
serviceRegistryFactory: org.gradle.internal.service.scopes.ProjectScopeServices$4@5c996cda
services: ProjectScopeServices
standardOutputCapture: org.gradle.internal.logging.services.DefaultLoggingManager@7588046f
state: project state 'EXECUTED'
status: integration
subprojects: []
tasks: task set
version: unspecified
zip: task ':zip'

BUILD SUCCESSFUL in 1s
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341