Gradle探索之路(一)

首先我們要安裝gradle并配置環(huán)境變量,參考官網(wǎng)
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,構(gòu)建一個task任務(wù),
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編寫完成后即可執(zhí)行該任務(wù)

gradle copy

執(zhí)行成功后我們看下目錄結(jié)構(gòu)

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

果然生成了dest文件夾洽蛀,進入我們可查看到myFile.txt文件,說明這個task完成了拷貝文件的任務(wù)

壓縮文件
首先需要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還提供了基于構(gòu)建的豐富的基于Web的視圖曲掰,稱為構(gòu)建掃描,通過--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這個地址就是我們構(gòu)建zip Task的基于web的視圖
通過瀏覽構(gòu)建掃描,則應(yīng)該能夠輕松找出執(zhí)行了哪些任務(wù)胎许,花費了多長時間峻呛,應(yīng)用了哪些插件等等

Gradle構(gòu)建屬性

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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市辜窑,隨后出現(xiàn)的幾起案子钩述,更是在濱河造成了極大的恐慌,老刑警劉巖穆碎,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件牙勘,死亡現(xiàn)場離奇詭異,居然都是意外死亡所禀,警方通過查閱死者的電腦和手機方面,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來色徘,“玉大人恭金,你說我怎么就攤上這事」硬撸” “怎么了横腿?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長斤寂。 經(jīng)常有香客問我耿焊,道長,這世上最難降的妖魔是什么遍搞? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任罗侯,我火速辦了婚禮,結(jié)果婚禮上尾抑,老公的妹妹穿的比我還像新娘歇父。我一直安慰自己蒂培,他們只是感情好再愈,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著护戳,像睡著了一般翎冲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上媳荒,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天抗悍,我揣著相機與錄音驹饺,去河邊找鬼。 笑死缴渊,一個胖子當著我的面吹牛赏壹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播衔沼,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼蝌借,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了指蚁?” 一聲冷哼從身側(cè)響起菩佑,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎凝化,沒想到半個月后稍坯,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡搓劫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年瞧哟,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片糟把。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡绢涡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出遣疯,到底是詐尸還是另有隱情雄可,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布缠犀,位于F島的核電站数苫,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏辨液。R本人自食惡果不足惜虐急,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望滔迈。 院中可真熱鬧止吁,春花似錦、人聲如沸燎悍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谈山。三九已至俄删,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背畴椰。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工臊诊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人斜脂。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓抓艳,卻偏偏與公主長得像,于是被迫代替她去往敵國和親帚戳。 傳聞我的和親對象是個殘疾皇子壶硅,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345