亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Gradle 的基本使用 HelloWorld篇

2019-11-07 23:02:26
字體:
來源:轉載
供稿:網友

和Maven一樣,Gradle只是提供了構建項目的一個框架,真正起作用的是Plugin。Gradle在默認情況下為我們提供了許多常用的Plugin,其中包括有構建java項目的Plugin,還有War,Ear等。 與Maven不同的是,Gradle不提供內建的項目生命周期管理,只是java Plugin向PRoject中添加了許多Task,這些Task依次執行,為我們營造了一種如同Maven般項目構建周期。https://gradle.org/

安裝Gradle

Ubuntu安裝Gradle比較簡單, 直接使用apt安裝即可

sudo apt-get install gradle

或者從官網下載, 下載完記得配置下環境變量 http://www.gradle.org/downloads

Gradle的task

Gradle執行對象主要有task和project,它們提供了執行的上下文.所有的Plugin要么向Project中添加用于配置的Property,要么向Project中添加不同的Task。一個Task表示一個邏輯上較為獨立的執行過程,比如編譯Java源代碼,拷貝文件,打包Jar文件,甚至可以是執行一個系統命令或者調用Ant。另外,一個Task可以讀取和設置Project的Property以完成特定的操作。

創建一個task

// ~build.gradle文件中// 默認情況下,gradle將當前項目下的build.gradle作為默認構建文件// task關鍵字定義一個編譯任務, << 表示向helloWorld這個task中插入grovvy代碼// gradle helloWorld 表示執行這個Task類型的對象,這也是定義一個Task的默認類型task helloWorld << { println "hello world"}

在這個目錄下 使用gradle helloWorld執行這個task

執行結果

Parallel execution with configuration on demand is an incubating feature.:helloWorldhello worldBUILD SUCCESSFULTotal time: 0.525 secs

這里的helloWorld是一個DefaultTask類型的對象,這也是定義一個Task時的默認類型,當然我們也可以顯式地聲明Task的類型,甚至可以自定義一個Task類型(我們將在本系列的后續文章中講到)。

定義一個copy文件的task

// 定義一個用于文件拷貝的Task// task 直接可能會存在依賴關系,這里是先執行taskB在執行copyFile tasktask copyFile (type: Copy) { // 這個Task的作用是將xml目錄下的文件copy到destination目錄下 // 這些目錄都是相對于build.gradle而言的 from 'xml' into 'destination'}

Task之間的依賴關系

ask之間可以存在依賴關系,比如taskA依賴于taskB,那么在執行taskA時,Gradle會先執行taskB,然后再執行taskA。聲明Task依賴關系的一種方式是在定義一個Task的時候:

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

查看project中的所有task

使用gradle tasks 查看所有的task,包括默認的和自己定義的。

Gradle在默認情況下為我們提供了幾個常用的Task,比如查看Project的Properties、顯示當前Project中定義的所有Task等。可以通過一下命令查看Project中所有的Task:   輸出結果

$ gradle tasksParallel execution with configuration on demand is an incubating feature.: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----------buildEnvironment - Displays all buildscript dependencies declared in root project 'helloWorld'.components - Displays the components produced by root project 'helloWorld'. [incubating]dependencies - Displays all dependencies declared in root project 'helloWorld'.dependencyInsight - Displays the insight into a specific dependency in root project 'helloWorld'.help - Displays a help message.model - Displays the configuration model of root project 'helloWorld'. [incubating]projects - Displays the sub-projects of root project 'helloWorld'.properties - Displays the properties of root project 'helloWorld'.tasks - Displays the tasks runnable from root project 'helloWorld'.Other tasks-----------copyFilehelloWorldTo see all tasks and more detail, run gradle tasks --allTo see more detail about a task, run gradle help --task <task>BUILD SUCCESSFULTotal time: 0.542 secs

查看所有預定義的properties

可以看到,除了我們自己定義的copyFile和helloWorld之外,Gradle還默認為我們提供了dependencies、projects和properties等Task。dependencies用于顯示Project的依賴信息,projects用于顯示所有Project,包括根Project和子Project,而properties則用于顯示一個Project所包含的所有Property。

在默認情況下,Gradle已經為Project添加了很多Property,我們可以調用以下命令進行查看:

gradle properties$ gradle propertiesParallel execution with configuration on demand is an incubating feature.:properties------------------------------------------------------------Root project------------------------------------------------------------allprojects: [root project 'helloWorld']ant: org.gradle.api.internal.project.DefaultAntBuilder@400558b1antBuilderFactory: org.gradle.api.internal.project.DefaultAntBuilderFactory@399cf3cartifacts: org.gradle.api.internal.artifacts.dsl.DefaultArtifactHandler_Decorated@232287c7asDynamicObject: org.gradle.api.internal.ExtensibleDynamicObject@28172472baseClassLoaderScope: org.gradle.api.internal.initialization.DefaultClassLoaderScope@42bd3111buildDir: /media/yangtianrui/system/MyGradleLearning/helloWorld/buildbuildFile: /media/yangtianrui/system/MyGradleLearning/helloWorld/build.gradlebuildScriptSource: org.gradle.groovy.scripts.UriScriptSource@f90f655buildscript: org.gradle.api.internal.initialization.DefaultScriptHandler@38bb44dfchildProjects: {}class: class org.gradle.api.internal.project.DefaultProject_DecoratedclassLoaderScope: org.gradle.api.internal.initialization.DefaultClassLoaderScope@291ed30ecomponents: []configurationActions: org.gradle.configuration.project.DefaultProjectConfigurationActionContainer@2805a85configurations: []convention: org.gradle.api.internal.plugins.DefaultConvention@aaa36dedefaultTasks: []deferredProjectConfiguration: org.gradle.api.internal.project.DeferredProjectConfiguration@685506e8dependencies: org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler_Decorated@370c3e4fdepth: 0description: nullext: org.gradle.api.internal.plugins.DefaultExtraPropertiesExtension@37d81e59extensions: org.gradle.api.internal.plugins.DefaultConvention@aaa36defileOperations: org.gradle.api.internal.file.DefaultFileOperations@6c1fd2bafileResolver: org.gradle.api.internal.file.BaseDirFileResolver@2c3dfb97gradle: build 'helloWorld'group: helloWorld: task ':helloWorld'inheritedScope: org.gradle.api.internal.ExtensibleDynamicObject$InheritedDynamicObject@7a954619logger: org.gradle.logging.internal.slf4j.OutputEventListenerBackedLogger@dc8b5c4logging: org.gradle.logging.internal.DefaultLoggingManager@1fd03cc5modelRegistry: org.gradle.model.internal.registry.DefaultModelRegistry@5cf28debmodelSchemaStore: org.gradle.model.internal.manage.schema.extract.DefaultModelSchemaStore@c87ade2module: org.gradle.api.internal.artifacts.ProjectBackedModule@1ed8c289name: helloWorldorg.gradle.configureondemand: trueorg.gradle.daemon: trueorg.gradle.jvmargs: -Xmx4096m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8org.gradle.parallel: trueparent: nullparentIdentifier: nullpath: :pluginManager: org.gradle.api.internal.plugins.DefaultPluginManager_Decorated@44a94f23plugins: [org.gradle.api.plugins.HelpTasksPlugin@61d2b87f]processOperations: org.gradle.api.internal.file.DefaultFileOperations@6c1fd2baproject: root project 'helloWorld'projectDir: /media/yangtianrui/system/MyGradleLearning/helloWorldprojectEvaluationBroadcaster: ProjectEvaluationListener broadcastprojectEvaluator: org.gradle.configuration.project.LifecycleProjectEvaluator@5a817567projectRegistry: org.gradle.api.internal.project.DefaultProjectRegistry@12d42609properties: {...}repositories: []resources: org.gradle.api.internal.resources.DefaultResourceHandler@238d710crootDir: /media/yangtianrui/system/MyGradleLearning/helloWorldrootProject: root project 'helloWorld'scriptHandlerFactory: org.gradle.api.internal.initialization.DefaultScriptHandlerFactory@2dd3e209scriptPluginFactory: org.gradle.configuration.DefaultScriptPluginFactory@7c288099serviceRegistryFactory: org.gradle.internal.service.scopes.ProjectScopeServices$4@4f7f157bservices: ProjectScopeServicesstandardOutputCapture: org.gradle.logging.internal.DefaultLoggingManager@1fd03cc5state: project state 'EXECUTED'status: releasesubprojects: []tasks: [task ':helloWorld', task ':properties']version: unspecifiedBUILD SUCCESSFULTotal time: 0.631 secs

在以上Property中,allprojects表示所有的Project,這里只包含一個根Project,在多項目構建中,它將包含多個Project;buildDir表示構建結果的輸出目錄;我們自己定義的helloWorld和copyFile也成為了Project中的Property。另外,Project還包括用于執行Ant命令的DefaultAntBuilder(Property名為ant)和Project的描述屬性description。

感謝:http://www.cnblogs.com/davenkin/p/gradle-learning-1.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久国产精品久久| 狠狠色狠狠色综合日日小说| 久久人人爽国产| 亚洲一区二区在线| 国产啪精品视频网站| 国产精品久久久久久久久久免费| 欧美最猛性xxxxx免费| 91国产高清在线| 成人中文字幕+乱码+中文字幕| 久久视频在线观看免费| 国产精品88a∨| 久久国产精品久久国产精品| 日韩一区av在线| 成人黄色免费网站在线观看| 亚洲综合日韩中文字幕v在线| 欧美激情久久久久久| 这里只有精品视频| 国产欧美日韩综合精品| 久久九九亚洲综合| 一区二区三区亚洲| 国产精品久久久久久久av电影| 亚洲女同精品视频| 亚洲影院色无极综合| 久久精品国产亚洲一区二区| 狠狠色狠色综合曰曰| 色播久久人人爽人人爽人人片视av| 欧美最猛性xxxxx亚洲精品| 国产精品激情av在线播放| 欧美国产精品人人做人人爱| 97精品视频在线播放| 亚洲乱码一区av黑人高潮| 97久久超碰福利国产精品…| 日本一区二区三区四区视频| 久久精品视频在线| 日韩精品在线播放| 亚洲日本成人网| 青青草成人在线| 久久精品成人一区二区三区| 亚洲天堂日韩电影| 国产精品中文久久久久久久| 日韩欧美亚洲综合| 亚洲一区av在线播放| 亚洲精品理论电影| 777精品视频| 国产精品久久久久久久久久ktv| 亚洲综合一区二区不卡| 亚洲色图五月天| 日韩国产高清视频在线| 亚洲美女喷白浆| 久久这里只有精品视频首页| 日韩中文字幕视频在线观看| 国产在线精品成人一区二区三区| 欧美日韩亚洲精品内裤| 欧美午夜www高清视频| 国产在线a不卡| 久久国产精品网站| 伊人久久免费视频| 亚洲欧美中文日韩在线v日本| 欧洲永久精品大片ww免费漫画| 久久人人看视频| 97视频免费在线看| 成人黄色av网| 日本韩国欧美精品大片卡二| 最近更新的2019中文字幕| 国产精品第2页| 亚洲免费av片| 欧美精品久久久久久久| 日韩免费av一区二区| 亚洲最新在线视频| 国产日韩欧美日韩大片| 97国产真实伦对白精彩视频8| 欧美丝袜美女中出在线| 亚洲男人天堂2019| 久久99久久亚洲国产| 国产欧美精品在线播放| 亚洲精品国产品国语在线| 亚洲精品福利视频| 亚洲国产精品久久91精品| 欧美成人免费视频| 欧美亚洲国产日韩2020| 日韩亚洲精品视频| 国产成人久久久精品一区| 国产精品极品美女粉嫩高清在线| 欧美激情欧美狂野欧美精品| 国产精品免费视频xxxx| 日韩av一卡二卡| 欧美亚洲视频在线观看| 久久99久久99精品中文字幕| 成人av电影天堂| 欧美午夜精品久久久久久久| 国产精品久久久久久一区二区| 亚洲高清免费观看高清完整版| 日本精品va在线观看| 日本成人免费在线| 久久久www成人免费精品张筱雨| 欧美精品videos另类日本| 欧美激情国内偷拍| 精品日本美女福利在线观看| 伊是香蕉大人久久| 97国产精品免费视频| 中文字幕亚洲一区二区三区五十路| 精品偷拍各种wc美女嘘嘘| 国产午夜精品视频免费不卡69堂| 久久久国产精彩视频美女艺术照福利| 欧美在线日韩在线| 国产成人一区二区| 国产精品极品尤物在线观看| 中文字幕亚洲综合久久| 精品调教chinesegay| 97久久国产精品| 丝袜情趣国产精品| 91精品国产高清久久久久久久久| 搡老女人一区二区三区视频tv| 久久天天躁狠狠躁夜夜躁2014| 欧美中文字幕在线观看| 国产精品毛片a∨一区二区三区|国| 久久精品久久久久| 欧美巨乳美女视频| 亚洲国产日韩欧美综合久久| 日韩在线小视频| 国产精品久久久久77777| 欧美精品999| 国产精品久久久久久搜索| 在线电影欧美日韩一区二区私密| 亚洲第一网中文字幕| 亚洲一区美女视频在线观看免费| 国产精品久久久久久久久久久久久| 欧美极品第一页| www国产精品视频| 久久午夜a级毛片| 亚洲乱码av中文一区二区| 日韩成人激情影院| 欧美又大又粗又长| 亚洲日韩欧美视频| 国产欧美精品一区二区三区介绍| 精品日韩视频在线观看| 麻豆一区二区在线观看| 国产成人亚洲综合91精品| 韩国三级日本三级少妇99| 亚洲成色www8888| 亚洲精品中文字| 久久6免费高清热精品| 久久九九精品99国产精品| 日韩精品在线免费观看视频| 亚洲第一精品福利| 亚洲第一区中文字幕| 亚洲成人动漫在线播放| 一区二区欧美在线| 精品中文视频在线| 三级精品视频久久久久| 日韩视频免费中文字幕| 尤物九九久久国产精品的分类| 国内精品久久久久久久久| 国产精品久久婷婷六月丁香| 亚洲欧美日韩视频一区| 最新国产精品拍自在线播放| 亚洲欧美国产高清va在线播| 欧美精品videosex性欧美| 精品伊人久久97| 国产成人精品电影| 欧美性猛交xxxx免费看漫画| 97色在线视频| 7777精品久久久久久| 亚洲石原莉奈一区二区在线观看|