Gradle 的基本使用 HelloWorld篇

和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.
:helloWorld
hello world

BUILD SUCCESSFUL

Total time: 0.525 secs

这里的helloWorld是一个DefaultTask类型的对象,这也是定义一个Task时的默认类型,当然我们也可以显式地声明Task的类型,甚至可以自定义一个Task类型(我们将在本系列的后续文章中讲到)。

定义一个copy文件的task

// 定义一个用于文件拷贝的Task
// task 直接可能会存在依赖关系,这里是先执行taskB在执行copyFile task
task 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 tasks

Parallel 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
-----------
copyFile
helloWorld

To see all tasks and more detail, run gradle tasks --all

To see more detail about a task, run gradle help --task <task>

BUILD SUCCESSFUL

Total 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 properties

Parallel execution with configuration on demand is an incubating feature.
:properties

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

allprojects: [root project 'helloWorld']
ant: org.gradle.api.internal.project.DefaultAntBuilder@400558b1
antBuilderFactory: org.gradle.api.internal.project.DefaultAntBuilderFactory@399cf3c
artifacts: org.gradle.api.internal.artifacts.dsl.DefaultArtifactHandler_Decorated@232287c7
asDynamicObject: org.gradle.api.internal.ExtensibleDynamicObject@28172472
baseClassLoaderScope: org.gradle.api.internal.initialization.DefaultClassLoaderScope@42bd3111
buildDir: /media/yangtianrui/system/MyGradleLearning/helloWorld/build
buildFile: /media/yangtianrui/system/MyGradleLearning/helloWorld/build.gradle
buildScriptSource: org.gradle.groovy.scripts.UriScriptSource@f90f655
buildscript: org.gradle.api.internal.initialization.DefaultScriptHandler@38bb44df
childProjects: {}
class: class org.gradle.api.internal.project.DefaultProject_Decorated
classLoaderScope: org.gradle.api.internal.initialization.DefaultClassLoaderScope@291ed30e
components: []
configurationActions: org.gradle.configuration.project.DefaultProjectConfigurationActionContainer@2805a85
configurations: []
convention: org.gradle.api.internal.plugins.DefaultConvention@aaa36de
defaultTasks: []
deferredProjectConfiguration: org.gradle.api.internal.project.DeferredProjectConfiguration@685506e8
dependencies: org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler_Decorated@370c3e4f
depth: 0
description: null
ext: org.gradle.api.internal.plugins.DefaultExtraPropertiesExtension@37d81e59
extensions: org.gradle.api.internal.plugins.DefaultConvention@aaa36de
fileOperations: org.gradle.api.internal.file.DefaultFileOperations@6c1fd2ba
fileResolver: org.gradle.api.internal.file.BaseDirFileResolver@2c3dfb97
gradle: build 'helloWorld'
group: 
helloWorld: task ':helloWorld'
inheritedScope: org.gradle.api.internal.ExtensibleDynamicObject$InheritedDynamicObject@7a954619
logger: org.gradle.logging.internal.slf4j.OutputEventListenerBackedLogger@dc8b5c4
logging: org.gradle.logging.internal.DefaultLoggingManager@1fd03cc5
modelRegistry: org.gradle.model.internal.registry.DefaultModelRegistry@5cf28deb
modelSchemaStore: org.gradle.model.internal.manage.schema.extract.DefaultModelSchemaStore@c87ade2
module: org.gradle.api.internal.artifacts.ProjectBackedModule@1ed8c289
name: helloWorld
org.gradle.configureondemand: true
org.gradle.daemon: true
org.gradle.jvmargs: -Xmx4096m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.parallel: true
parent: null
parentIdentifier: null
path: :
pluginManager: org.gradle.api.internal.plugins.DefaultPluginManager_Decorated@44a94f23
plugins: [org.gradle.api.plugins.HelpTasksPlugin@61d2b87f]
processOperations: org.gradle.api.internal.file.DefaultFileOperations@6c1fd2ba
project: root project 'helloWorld'
projectDir: /media/yangtianrui/system/MyGradleLearning/helloWorld
projectEvaluationBroadcaster: ProjectEvaluationListener broadcast
projectEvaluator: org.gradle.configuration.project.LifecycleProjectEvaluator@5a817567
projectRegistry: org.gradle.api.internal.project.DefaultProjectRegistry@12d42609
properties: {...}
repositories: []
resources: org.gradle.api.internal.resources.DefaultResourceHandler@238d710c
rootDir: /media/yangtianrui/system/MyGradleLearning/helloWorld
rootProject: root project 'helloWorld'
scriptHandlerFactory: org.gradle.api.internal.initialization.DefaultScriptHandlerFactory@2dd3e209
scriptPluginFactory: org.gradle.configuration.DefaultScriptPluginFactory@7c288099
serviceRegistryFactory: org.gradle.internal.service.scopes.ProjectScopeServices$4@4f7f157b
services: ProjectScopeServices
standardOutputCapture: org.gradle.logging.internal.DefaultLoggingManager@1fd03cc5
state: project state 'EXECUTED'
status: release
subprojects: []
tasks: [task ':helloWorld', task ':properties']
version: unspecified

BUILD SUCCESSFUL

Total 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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值