Gradle User Guide 中文版 (中文版)

User Manual:

Open the PDF directly: View PDF PDF.
Page Count: 84

1.
2. 概述
i. 特点
ii. 什么用Groovy?
3. 教程
i.
4. 安装Gradle
i. 先决条件
ii.
iii. 压缩
iv.
v. 行并测试您的安装
vi. JVM选项
5. 排除故障
i. 解决遇到的问题
ii. 得帮助
6. 建脚本基
i. Projectstasks
ii. Helloworld
iii. 快捷的任
iv. 建脚本代
v.
vi. 动态
vii. 使用已存在的任
viii. 快捷注
ix. 附加的task属性
x. 使用Ant
xi. 使用方法
xii.
xiii. DAG配置
7. Java快速入
i. Java插件
ii. 一个基Java
i. 建立
ii. 外部的依
iii. 定制
iv. JAR文件
v. Eclipse
vi. 总结
iii. 目的Java
i. 一个多
ii. 通用配置
iii. 目之的依
iv. 建一个行版本
8. 管理的基
i. 什么是依管理
ii. 声明你的依
iii. 配置
iv. 外部的依
v. 仓库
vi. artifacts
9. Groovy快速入
TableofContents
i. 一个基本的Groovy
ii. 总结
10.页应用快速入
i. 建一个WAR文件
ii. Web
iii. 总结
11. 使用Gradle命令行
i. 多任务调
ii. 排除任
iii. 继续执
iv. 化任
v. 选择文件
vi. 建信息
i. 目列表
ii. 列表
iii. 取任具体信息
iv. 取依列表
v. 看特定依
vi. 目属性列表
vii. Profilingabuild
12.UsingtheGradleGraphicalUserInterface
13.WritingBuildScripts
14.Tutorial-'ThisandThat'
15.MoreaboutTasks
16.WorkingWithFiles
i. Locatingfiles
ii. Filecollections
GradleUserGuide中文版正在翻当中迎大家一起加入水平有限大家指正翻译错误的地方
https://github.com/DONGChuan/GradleUserGuideGithub地址
http://www.gradle.org/docs/current/userguide/userguide_single.html#N1012C原文地址
我会开放每一个加入的伴,提前dongchuan55@gmail.com
GradleUserGuide中文版
特点
什么用Groovy?
概述
述下Gradle的特点.
1.声明式建和合约构
Gradle的核心是基于Groovy域特定(DSL),具有十分秀的展性.Gradle提供可以随意集成的声明式
元素将声明性建推到了一个新的高度.些元素提供了Java,Groovy,OSGi,Scala目的支持.而且,基于
种声明式言的可展性.你可以添加自己的言元素或加有的言元素,从而提供简洁,易于维护和易于理解的.
2.基于依
声明式言位于通用任务图(generalpurposetaskgraph)端,它可以被充分利用在你的建中.它具有大的灵活性,
可以足使用者Gradle的一些特的需求.
3.让构结构
Gradle的易适性和丰富性可你在建里直接套用通用的设计.例如,你可以非常容易容易的使用一些可重用的件来
成你的.Inlinestuffwhereunnecessaryindirectionswouldbeinappropriate.不要行分离已经结合在一起的部分(
,在你的结构).避免使维护.,你可以建一个结构良好,易于维护,易于理解的.
4.API深化
你会非常意在整个行的生命周期中使用Gradle,Gradle你管理和定制它的配置和行行.
5.Gradlescales
Gradlescalesverywell.不管是简单的独立是大型的多,它都能著的提高效率.它不可以提供最先
建功能,可以解决多大公司碰到的性能低下的问题.
6.
Gradle目的支持是非常出色的.它允你模在多建中目的关系,正是你所要关注的地方.Gradle遵从你
的布局而是去反它.
Gradle提供了局部建的功能.如果你建一个独的子,Gradle个子目依的所有子.你也可以选择
一个特的子目重新些子.这样在一些大型目里就可以省非常多的时间.
7.多种方式来管理你的依
不同的团队有不同的管理外部依的方法.Gradle于任何管理策略都提供了合适的支持.MavenIvy的依
理到本地文件系jars或者dirs.
8.Gradle是第一个建整合工具
Anttasksarefirstclasscitizens.Evenmoreinteresting,Antprojectsarefirstclasscitizensaswell.Gradleprovidesadeep
importforanyAntproject,turningAnttargetsintonativeGradletasksatruntime.YoucandependonthemfromGradle,
youcanenhancethemfromGradle,youcanevendeclaredependenciesonGradletasksinyourbuild.xml.Thesame
integrationisprovidedforproperties,paths,etc...
GradlefullysupportsyourexistingMavenorIvyrepositoryinfrastructureforpublishingandretrievingdependencies.Gradle
alsoprovidesaconverterforturningaMavenpom.xmlintoaGradlescript.RuntimeimportsofMavenprojectswillcome
soon.
9.易于迁移
Gradlecanadapttoanystructureyouhave.ThereforeyoucanalwaysdevelopyourGradlebuildinthesamebranch
特点
whereyourproductionbuildlivesandbothcanevolveinparallel.Weusuallyrecommendtowriteteststhatmakesurethat
theproducedartifactsaresimilar.Thatwaymigrationisaslessdisruptiveandasreliableaspossible.Thisisfollowingthe
best-practicesforrefactoringbyapplyingbabysteps.
10.Groovy
Gradle'sbuildscriptsarewritteninGroovy,notXML.Butunlikeotherapproachesthisisnotforsimplyexposingtheraw
scriptingpowerofadynamiclanguage.Thatwouldjustleadtoaverydifficulttomaintainbuild.ThewholedesignofGradle
isorientedtowardsbeingusedasalanguage,notasarigidframework.AndGroovyisourgluethatallowsyoutotellyour
individualstorywiththeabstractionsGradle(oryou)provide.Gradleprovidessomestandardstoriesbuttheyarenot
privilegedinanyform.Thisisforusamajordistinguishingfeaturescomparedtootherdeclarativebuildsystems.Our
Groovysupportisalsonotjustsomesimplecoatingsugarlayer.ThewholeGradleAPIisfullygroovynized.Onlybythat
usingGroovyisthefunandproductivitygainitcanbe.
10.TheGradlewrapper
TheGradleWrapperallowsyoutoexecuteGradlebuildsonmachineswhereGradleisnotinstalled.Thisisusefulfor
exampleforsomecontinuousintegrationservers.Itisalsousefulforanopensourceprojecttokeepthebarrierlowfor
buildingit.Thewrapperisalsoveryinterestingfortheenterprise.Itisazeroadministrationapproachfortheclient
machines.ItalsoenforcestheusageofaparticularGradleversionthusminimizingsupportissues.
11.和开源
Gradle是一个开源,遵循ASL.
们认为在脚本,内部基于XMLDSL(基于一个动态语言)优势是巨大的.动态语言在那里,们为什么选择
Groovy?答案在于Gradle.Gradle是以一个多用途的建工具核心,它的重点是Java.这样
,团队每个成都了解Java.们认为构尽可能所有团队都是透明的,所以选择Groovy.
你可能会什么不直接使用Java为构建脚本的.们认为这是一个有效性的问题.于你的团队,它要有最高的透
明度和最低的学线,也就是容易掌握.但由于Java的限制,这样言不会那么完美和.PythonGroovy
Ruby言都可以有更高的效率.们选择Groovy是因Java提供了迄今止最大的透明度.其基本的符
号和型与Java是一的,其封装结构多其他的地方也是如此.
于那些同分享PythonRubyJava团队将会很意学.Gradle设计非常适合在JRubyJython
一个建脚本引擎.它只是目前开.十分支持任何人来做,外的建脚本引擎.
什么用Groovy?
教程
接下来的教程先介Gradle的基
描述如何安装Gradle.
脚本建的基元素:projectstasks.
展示如何开始使用Gradle的合约构建来Java.
展示如何开始使用Gradle的依管理.
使用Gradle的合约构建来Groovy.
使用Gradle的合约构建来建网页应.
Chapter3,安装Gradle
Chapter5,脚本建基
Chapter6,Java快速入
Chapter7,管理基
Chapter8,Groovy快速入
Chapter9,页应用快速入
先决条件
压缩
行并测试您的安装
JVM选项
安装Gradle
Gradle需要安装一个JavaJDK或者JRE.Java版本必至少是6以上.GradleGroovy,所以没必要安装Groovy.
何已安装的Groovy会被Gradle忽略.
Gradle使用任何存在在你的路径中的JDK(可以通java-version检查).或者,你可以JAVA_HOME境参数来指定希
望使用的JDK的安装目.
先决条件
你可以从Gradle网站任意一个已经发布的版本
Gradle布的版本ZIP格式.所有文件包含:
Gradle制文件.
指南(HTMLPDF).
DSL参考指南.
API文档(JavadocGroovydoc).
展的例子,包括用指南中引用的例,以及一些完整的以及更复build来帮助用户构建自己的build.
制源.此代码仅供参考.如果你想要Gradle你需要下载发布的源代或者提取代码库中的源代.参考官方网
得具体的信息.
压缩
Gradle,添加GRADLE_HOME/bin到您的PATH量中.通常,这样够运Gradle.
里的GRADLE_HOMEGradle的安装路径.
您可以通gradle命令来Gradle.gradle-v命令来检测Gradle是否已正确安装.如果正确安装,会Gradle
本信息以及本地的配置(groovyJVM版本等).示的版本信息应该与您所下gradle版本信息相匹配.
行并测试您的安装
JVM选项可以通过设量来更改.您可以使用GRADLE_OPTS或者JAVA_OPTS.根据,JAVA_OPTS是一个用
JAVA用的.一个典型的用例是在JAVA_OPTSHTTP代理服(proxy),GRADLE_OPTS是内存
选项.量也可以在gradle的一开始就置或者通gradlew脚本.
JVM选项
当使用Gradle,你肯定会碰到问题.你也不知道如果使用一个特的功能,或者你碰到了一个BUG.或者,你只是有
一些关于使用yGradle问题.
一章出了一些简单的建并解了如何解决你的问题.
排除故障
如果你碰到了问题,首先要确定你使用的是最新版本的Gradle.布新版本,解决一些bug并加入新的功能.所以
你遇到的问题可能就在新版本里解决了.
如果你正在使用GradleDaemon,暂时daemon(你可以使用switch--no-daemon命令).在第19章我可以了解到更
多关于daemon的信息.
解决遇到的问题
可以去http://forums.gradle.org得相关的帮助.Gradle论坛,你可以提交问题,当然也可以回答其他Gradle
和使用者的问题.
如果你碰到不能解决的问题,论坛告或者提出问题,通常是解决问题最快的方法.您也可以提出建或者一些
新的想法.发团队常性的布新的西或者布通知,过论坛,您可以Gradle最新的开信息.
得帮助
Projectstasks
Helloworld
快捷的任
建脚本代
动态
使用已存在的任
快捷注
附加的task属性
使用Ant
使用方法
的任
DAG配置
建脚本基
Gradle里的任何西都是基于这两个基概念:projects()tasks().
每一个Gradle建都是由一个或多个projects成的.一个project到底代表什么依于你想用Gradle做什么.个例子,
project代表一个JAR或者一个网页应.它也可能代表一个布的ZIP压缩,ZIP可能是由多其他目的
JARs成的.一个project不必要代表要被建的某个西.它可以代表一件要做的事,比如布署你的.不要担心
明看上去有一点模糊.Gradle的合约构建的支持加入了一个更加具体的关于project的定.
每一个project是由一个或多个tasks成的.一个task代表一些更加化的.可能是编译一些classes,建一个JAR,
javadoc,或者生成莫个目压缩文件.
目前,将关注定义构建里的一些简单tasks.以后的章会关注与多建以及如果通projectstasks工作.
Projectstasks
您通gradle命令行一个Gradle.gradle命令会在当前目录查找一个叫build.gradle的文件.
build.gradle文件一个建脚本(buildscript),格来它是一个建配置脚本(buildconfigurationscript).个脚本定
了一个project和它的tasks.
建一个名build.gradle建脚本.
Example6.1.第一个建脚本
build.gradle
taskhello{
doLast{
println'Helloworld!'
}
}
在命令行里,入包含的文件然后通gradle-qhello建脚本:
gradle-qhello
>gradle-qhello
Helloworld!
生了什么?建脚本定了一个独的task,叫做hello,并且加入了一个action.当你gradlehello,Gradle
行叫做hellotask,也就是行了你所提供的action.action是一个包含一些Groovy(closure个概念
不清楚的同学好好谷歌下).
如果你认为这些看上去和Anttargets很想象,好吧,你是.GradletasksAnttargets等的.但是你也会看到,
是更加力的.使用一个不同于Ant术语task,看上去比target更加能直白.不幸的是来了一个术语冲突,
Ant称它的命令,比如javac或者copy,tasks.所以当我们谈论tasks,是指Gradletasks.如果我讨论Ant
tasks(Ant命令),会直接称呼anttask.
充一点命令里的-q是干什么的?
个指南里大多的例子会在命令里加入-q.它取Gradle的日志信息(logmessages),所以用只能看到tasks
.它例子的出更加清晰.你并不一定需要加入选项.参考第18,日志的Gradle响输出的详细信息.
Helloworld
有一种比我之前定hello明的方法
*Example6.3.快捷的任
build.gradle*
taskhello<<{
println'Helloworld!'
}
再一次,它定一个叫做hello的任,个任是一个可以行的.将使用种方式来定义这本指南里所有的任.
快捷的任
Gradle建脚本展示Groovy的所有能力.开胃菜,来看看:
Example6.4.Gradle里使用Groovy
build.gradle
taskupper<<{
StringsomeString='mY_nAmE'
println"Original:"+someString
println"Uppercase:"+someString.toUpperCase()
}
gradle-qupper命令的
>gradle-qupper
Original:mY_nAmE
Uppercase:MY_NAME
或者
Example6.5.Gradle里使用Groovy
build.gradle
taskcount<<{
4.times{print"$it"}
}
gradle-qcount命令的
>gradle-qcount
0123
建脚本代
就像你所猜想的那,你可以申明任的依关系.
Example6.6.申明任的依关系
build.gradle
taskhello<<{
println'Helloworld!'
}
taskintro(dependsOn:hello)<<{
println"I'mGradle"
}
gradle-qintro命令的
>gradle-qintro
Helloworld!
I'mGradle
再加入一个依之前,个依的任不需要提前定,来看下面的例子.
Example6.7.LazydependsOn-其他的任务还没有存在
build.gradle
tasktaskX(dependsOn:'taskY')<<{
println'taskX'
}
tasktaskY<<{
println'taskY'
}
gradle-qtaskX命令的
>gradle-qtaskX
taskY
taskX
taskXtaskY的依taskY被定之前就已申明了.于我之后到的多任务构建是非常重要的.将会在
14.4具体讨论.
注意你不能使用快捷注(参考5.8,“快捷注”)当所关的任务还没有被定.
Groovy仅仅被用来定一个任可以做什么.个例子,你可以使用它来动态建任.
Example6.8.动态建一个任
build.gradle
4.times{counter->
task"task$counter"<<{
println"I'mtasknumber$counter"
}
}
gradle-qtask1命令的
>gradle-qtask1
I'mtasknumber1
动态
当任务创建之后,它可以通API访问.个和Ant不一.个例子,你可以外的依.
Example6.9.API访问一个任-加入一个依
build.gradle
4.times{counter->
task"task$counter"<<{
println"I'mtasknumber$counter"
}
}
task0.dependsOntask2,task3
gradle-qtask0命令的
>gradle-qtask0
I'mtasknumber2
I'mtasknumber3
I'mtasknumber0
或者你可以一个已存在的任加入行.
Example6.10.API访问一个任-加入行
build.gradle
taskhello<<{
println'HelloEarth'
}
hello.doFirst{
println'HelloVenus'
}
hello.doLast{
println'HelloMars'
}
hello<<{
println'HelloJupiter'
}
gradle-qhello命令的
>gradle-qhello
HelloVenus
HelloEarth
HelloMars
HelloJupiter
doFirstdoLast可以被多次.可以在任务动作列表的开始和束加入.当任务执行的,作列表里的
作将被按.<<操作符是doLast简单别.
使用已存在的任
正如同你已在之前的示例里看到的,有一个方便的注可以访问一个存在的任.每个任可以作为构建脚本的属性:
Example6.11.当成建脚本的属性来访问一个任
build.gradle
taskhello<<{
println'Helloworld!'
}
hello.doLast{
println"Greetingsfromthe$hello.nametask."
}
gradle-qhello命令的
>gradle-qhello
Helloworld!
Greetingsfromthehellotask.
里的name是任的默属性,代表当前任的名字,里是hello
使得代易于取,特是当使用了由插件(如编译)提供的任务时尤其如此.
快捷注
你可以加入你自己的属性.了加入一个myProperty属性,置一个初始值给ext.myProperty.一点上来
性可以取和置像一个的任属性.
Example6.12.加入外的属性
build.gradle
taskmyTask{
ext.myProperty="myValue"
}
taskprintTaskProperties<<{
printlnmyTask.myProperty
}
gradle-qprintTaskProperties命令的
>gradle-qprintTaskProperties
myValue
外的属性是没有限制的.你可以在13.4.2,“外属性”得更多的信息.
附加的task属性
AntGradle的一等公民.GradleGroovy出色的集成了Ant.GroovyAntBuilder装在在一起.相比于使用
Ant从一个build.xml文件,Gradle里使用Ant方便和.从下面的例子中,你可以学如何Ant
及如何访问ant属性:
Example6.13.使用AntBuilderant.loadfile
build.gradle
taskloadfile<<{
deffiles=file('../antLoadfileResources').listFiles().sort()
files.each{Filefile->
if(file.isFile()){
ant.loadfile(srcFile:file,property:file.name)
println"***$file.name***"
println"${ant.properties[file.name]}"
}
}
}
gradle-qloadfile命令的
>gradle-qloadfile
***agile.manifesto.txt***
Individualsandinteractionsoverprocessesandtools
Workingsoftwareovercomprehensivedocumentation
Customercollaborationovercontractnegotiation
Respondingtochangeoverfollowingaplan
***gradle.manifesto.txt***
使不可能成可能,使可能更加简单,使简单更加.
使用Ant
Gradle能很好地衡量你逻辑的能力.首先衡量的是如何提取一个方法.
*Example6.14.使用方法划你的逻辑
build.gradle*
taskchecksum<<{
fileList('../antLoadfileResources').each{Filefile->
ant.checksum(file:file,property:"cs_$file.name")
println"$file.nameChecksum:${ant.properties["cs_$file.name"]}"
}
}
taskloadfile<<{
fileList('../antLoadfileResources').each{Filefile->
ant.loadfile(srcFile:file,property:file.name)
println"I'mfondof$file.name"
}
}
File[]fileList(Stringdir){
file(dir).listFiles({file->file.isFile()}asFileFilter).sort()
}
adle-qloadfile命令的
>gradle-qloadfile
I'mfondofagile.manifesto.txt
I'mfondofgradle.manifesto.txt
稍后你看到,种方法可以在多建的子目之共享.如果你的逻辑变得更加复,Gradle你提供了其他非常方
便的方法.59章,组织构逻辑
使用方法
Gradle你定一个或多个默.
Example6.15.一个默
build.gradle
defaultTasks'clean','run'
taskclean<<{
println'DefaultCleaning!'
}
taskrun<<{
println'DefaultRunning!'
}
taskother<<{
println"I'mnotadefaulttask!"
}
gradle-q命令的
>gradle-q
DefaultCleaning!
DefaultRunning!
等价于gradlecleanrun.在一个多建中,每一个子目都可以有它特的默.如果一个子目没有特的默
,目的默将会被.
正如我之后的详细描述(55章,建的生命周期),Gradle有一个配置段和.在配置段后,Gradle将会知
应执行的所有任.Gradle你提供一个"",以便利用些信息.个例子,判断布的任是否在要被行的任当中.
根据一点,你可以一些量指定不同的.
在接着的例子中,distributionrelease将根据量的版本生不同的.
Example6.16.根据选择的任务产生不同的
build.gradle
taskdistribution<<{
println"Webuildthezipwithversion=$version"
}
taskrelease(dependsOn:'distribution')<<{
println'Wereleasenow'
}
gradle.taskGraph.whenReady{taskGraph->
if(taskGraph.hasTask(release)){
version='1.0'
}else{
version='1.0-SNAPSHOT'
}
}
gradle-qdistribution命令的
>gradle-qdistribution
Webuildthezipwithversion=1.0-SNAPSHOT
Outputofgradle-qrelease
>gradle-qrelease
Webuildthezipwithversion=1.0
Wereleasenow
最重要的是whenReadyrelease务执行之前就已release.甚至release不是首要任(i.e.,首要任
是指通gradle命令的任).
DAG配置
Java插件
一个基Java
目的Java
Java快速入
正如我看到的,Gradle是一种多种用途的建工具.它可以在你的建脚本里建你在意的西.然而,除非你在
建脚本里加入代,不然它什么都不会.
大都数Java目是非常相像的:你需要编译你的Java源文件,行一些测试,时创建一个包含你文件的JAR.如果
你不需要每一个目重复,我想你会非常意的.的是,在不再需要了.Gradle使用插件解决了
.一个插件是Gradle的一个,它会通某种方式配置你的,典型的有加入一些配置任.Gradle多插件,
你也可以很简单写自己的插件并和其他开者分享它.Java插件就是一个这样的插件.个插件在你的目里加入了
些任编译Th测试你的源文件,并且把它集成都一个JAR文件里.
Java插件是基于合.意味着插件给项目的多方面定了默,比如Java源文件在.如果你在目里遵从
些合,你通常不需要在你的建脚本里加入太多西.如果你不想要或者是你不能遵循合,Gradle你自己定制你的
.,为对Java目的支持是通插件实现,如果你不想要的你一点也不需要使用个插件来建你的.
在后面的章,多能你深入了解Java插件,管理和多建的例子很多例子.在本章中,我你一个如
何使用Java插件来建一个Java目的初步认识
Java插件
来看一个简单的例子.加入下面的代来使用Java插件:
例子6.1.使用Java插件
build.gradle
applyplugin:'java'
个例子的代可以在samples/java/quickstart里找到,制代和源代里都包含些文件.它将会把Java插件加入到
你的目中,意味着多任被自的加入到了你的目里.
Gradle希望能在src/main/java找到你的源代,src/test/java找到你的测试.,任何在src/main/resources的文件
都将被包含在JAR文件里,任何在src/test/resources的文件会被加入到classpath中以测试.所有的出文件
将会被建在建目,JAR文件存放在build/libs文件.
都有什么可以行的任?
你可以使用**gradletasks来列出目的所有任to.过这个命令来尝试看看Java插件都在你的目里加入了些命令吧.
一个基Java
Java插件在你的目里加入了多任.然而,你只会用到其中的一小部分任.最常用的任build,它会建立你的
.当你gradlebuild命令,Gradle编译测试你的代,并且建一个包含源的JAR文件:
Example7.2.建立一个Java
gradlebuild命令的
>gradlebuild
:compileJava
:processResources
:classes
:jar
:assemble
:compileTestJava
:processTestResources
:testClasses
:test
:check
:build
BUILDSUCCESSFUL
Totaltime:1secs
其余一些有用的任:
clean
build生成的目和所有生成的文件.
assemble
编译并打包你的代,但是并不测试.其他插件会在个任里加入更多的西.个例子,如果你使用War插件,
个任将根据你的目生成一个WAR文件.
check
编译测试你的代.其他的插件会加入更多的检查.个例子,如果你使用checkstyle插件,个任将会
Checkstyle检查你的代.
建立
通常,一个Java目将有多外部的依,既是指外部的JAR文件.了在目里引用JAR文件,你需要告Gradle
里找它.Gradle,JAR文件位于一个仓库中,里的仓库类似于MAVEN仓库.仓库可以被用来提取依,或者放
入一个依,或者者皆可.个例子,将使用开放的Maven仓库:
例子6.3.加入Maven仓库
build.gradle
repositories{
mavenCentral()
}
接下来加入一些依.,目在编译阶段有一些依:
例子6.4.加入依
build.gradle
dependencies{
compilegroup:'commons-collections',name:'commons-collections',version:'3.2'
testCompilegroup:'junit',name:'junit',version:'4.+'
}
你可以在第7章里看到更多方面的内容.
外部的依
Java插件给项目加入了一些属性(propertiy).些属性已被定了默,来开始目了.如果你认为不合
,也是很简单.看下个例子.里我将指定Java目的版本号,以及我所使用的Java的版本.
也加入了一些属性在jar的清.
例子6.5.定制MANIFEST.MF文件
build.gradle
sourceCompatibility=1.5
version='1.0'
jar{
manifest{
attributes'Implementation-Title':'GradleQuickstart','Implementation-Version':version
}
}
Java插件加入的任是常性的任,准确地,就如同它建文件里声明地一.意味着你可以使用任之前的章
提到的方法来定制些任T.个例子,你可以置一个任的属性,在任里加入行,的依,或者完全重写一个
,将配置一个测试,测试执行的候它会加入一个系属性:
例子6.6.测试阶段加入一个系属性
build.gradle
test{
systemProperties'property':'value'
}
些属性是可用的?
你可以使用gradleproperties命令来列出目的所有属性.这样你就可以看到Java插件加入的属性以及它的默认值.
定制
通常JAR文件需要在某个地方.了完成一步,你需要告GradleJAR文件.Gradle,生成的文件比如
JAR文件将被布到仓库.在我的例子里,布到一个本地的目.你也可以布到一个或多个程的地点.
Example7.7.JAR文件
build.gradle
uploadArchives{
repositories{
flatDir{
dirs'repos'
}
}
}
gradleuploadArchives命令来JAR文件.
JAR文件
了把你的入到Eclipse,你需要加入外一个插件:
Example7.8.Eclipse插件
build.gradle
applyplugin:'eclipse'
gradleeclipse命令来生成Eclipse目文件.Eclipse将在第38,Eclipse插件里详细讨论.
Eclipse
下面是一个完整的建文件的:
Example7.9.Java例子-完整的建文件
build.gradle
applyplugin:'java'
applyplugin:'eclipse'
sourceCompatibility=1.5
version='1.0'
jar{
manifest{
attributes'Implementation-Title':'GradleQuickstart','Implementation-Version':version
}
}
repositories{
mavenCentral()
}
dependencies{
compilegroup:'commons-collections',name:'commons-collections',version:'3.2'
testCompilegroup:'junit',name:'junit',version:'4.+'
}
test{
systemProperties'property':'value'
}
uploadArchives{
repositories{
flatDir{
dirs'repos'
}
}
}
总结
看一个典型的多.下面是目的布局:
Example7.10.-布局
建布局
multiproject/
api/
services/webservice/
shared/
注意:个例子的代可以在samples/java/multiproject里找到.
在我能有三个.目的用程序接口(API)生一个JAR文件,个文件将提供,提供基于XML的网
.目的网是一个网络应,它返回XML.shared包含被apiwebservice共享的代.
目的Java
了定一个多,你需要建一个置文件(settingsfile).置文件放在源代的根目,它指定要包含.
的名字必叫做settings.gradle.个例子中,使用一个简单的分布局.下面是对应置文件:
Example7.11.-settings.gradlefile
settings.gradle
include"shared","api","services:webservice","services:shared"
在第56.,你可以找到更多关于置文件的信息.
一个多
大多数多,有一些配置所有目都是常的或者是通用的.在我的例子里,将在根目里定一个
这样的通用配置,使用一种叫做配置注入的技(configurationinjection).,目就像一个容器,subprojects方法遍历这
个容器的所有元素并且注入指定的配置.过这种方法,可以很容易的定所有档案和通用依的内容清:
Example7.12.-通用配置
build.gradle
subprojects{
applyplugin:'java'
applyplugin:'eclipse-wtp'
repositories{
mavenCentral()
}
dependencies{
testCompile'junit:junit:4.11'
}
version='1.0'
jar{
manifest.attributesprovider:'gradle'
}
}
注意我例子中,Java插件被用到了每一个子目中plugintoeach.意味着我前几章看到的任和属性都可以在子
目里被.所以,你可以通在根目gradlebuild命令编译,测试,JAR所有的.
通用配置
你可以在同一个建里加入目之的依,个例子,一个目的JAR文件被用来编译另外一个.api建文件里我
将加入一个由shared生的JAR文件的依.由于个依,Gradle将确保shared是在api之前被.
Example7.13.-目之的依
api/build.gradle
dependencies{
compileproject(':shared')
}
目之的依
(章需加入更多内容。。。原稿写的太简单)也加入了一个行版本,将会送到客:
Example7.14.-行文件
api/build.gradle
taskdist(type:Zip){
dependsOnspiJar
from'src/dist'
into('libs'){
fromspiJar.archivePath
fromconfigurations.runtime
}
}
artifacts{
archivesdist
}
建一个行版本
什么是依管理
声明你的依
配置
外部的依
仓库
artifacts
管理的基
Veryroughly,dependencymanagementismadeupoftwopieces.Firstly,Gradleneedstoknowaboutthethingsthatyour
projectneedstobuildorrun,inordertofindthem.Wecalltheseincomingfilesthedependenciesoftheproject.Secondly,
Gradleneedstobuildanduploadthethingsthatyourprojectproduces.Wecalltheseoutgoingfilesthepublicationsofthe
project.Let'slookatthesetwopiecesinmoredetail:
Mostprojectsarenotcompletelyself-contained.Theyneedfilesbuiltbyotherprojectsinordertobecompiledortestedand
soon.Forexample,inordertouseHibernateinmyproject,IneedtoincludesomeHibernatejarsintheclasspathwhenI
compilemysource.Torunmytests,Imightalsoneedtoincludesomeadditionaljarsinthetestclasspath,suchasa
particularJDBCdriverortheEhcachejars.
Theseincomingfilesformthedependenciesoftheproject.Gradleallowsyoutotellitwhatthedependenciesofyour
projectare,sothatitcantakecareoffindingthesedependencies,andmakingthemavailableinyourbuild.The
dependenciesmightneedtobedownloadedfromaremoteMavenorIvyrepository,orlocatedinalocaldirectory,ormay
needtobebuiltbyanotherprojectinthesamemulti-projectbuild.Wecallthisprocessdependencyresolution.
Often,thedependenciesofaprojectwillthemselveshavedependencies.Forexample,Hibernatecorerequiresseveral
otherlibrariestobepresentontheclasspathwithitruns.So,whenGradlerunsthetestsforyourproject,italsoneedsto
findthesedependenciesandmakethemavailable.Wecallthesetransitivedependencies.
Themainpurposeofmostprojectsistobuildsomefilesthataretobeusedoutsidetheproject.Forexample,ifyourproject
producesajavalibrary,youneedtobuildajar,andmaybeasourcejarandsomedocumentation,andpublishthem
somewhere.
Theseoutgoingfilesformthepublicationsoftheproject.Gradlealsotakescareofthisimportantworkforyou.Youdeclare
thepublicationsofyourproject,andGradletakecareofbuildingthemandpublishingthemsomewhere.Exactlywhat
"publishing"meansdependsonwhatyouwanttodo.Youmightwanttocopythefilestoalocaldirectory,oruploadthemto
aremoteMavenorIvyrepository.Oryoumightusethefilesinanotherprojectinthesamemulti-projectbuild.Wecallthis
processpublication.
什么是依管理?
看一下一些依的声明.下面是一个基建脚本:
例子7.1.声明依
build.gradle
applyplugin:'java'
repositories{
mavenCentral()
}
dependencies{
compilegroup:'org.hibernate',name:'hibernate-core',version:'3.6.7.Final'
testCompilegroup:'junit',name:'junit',version:'4.+'
}
生了什么?建脚本声明Hibernatecore3.6.7.Final被用来编译项目的源代.Byimplication,段同
需要Hibernatecore和它的依.建脚本同声明了需要junit>=4.0的版本来编译项测试.它告GradleMaven
里找任何需要的依.接下来的部分会具体.
声明你的依
Gradle,可以合成配置.一个配置简单就是一系列的依.称它们为配置.你可以使用它声明
的外部依.正如我将在后面看到,也被用来声明目的.
Java插件定准的配置.下面列出了一些,你也可以在表格23.5,“Java插件-配置发现更多具体的信息.
compile
用来编译项目源代的依.
runtime
被生成的使用的依.,也包含了编译时的依.
testCompile
编译测试的依.,包含生成的类运行所需的依编译源代的依.
testRuntime
测试所需要的依.,包含上面三个依.
各种各的插件加入准的配置.你也可以定你自己的配置.参考50.3,“配置依”可以找到更加具体的定和定制一
个自己的依配置.
配置
你可以声明多种依.其中一种是外部依.是一种在当前建之外的一种依,它被存放在程或本地的仓库,比如
Maven,或者Ivy,甚至是一个本地的目.
下面的例子展示如何加入外部依
例子7.2.一个外部依
build.gradle
dependencies{
compilegroup:'org.hibernate',name:'hibernate-core',version:'3.6.7.Final'
}
引用一个外部依需要使用group,nameversion属性.根据你想要使用的,groupversion可能会有所差.
有一种写形式,只使用一串字符串"group:name:version".
例子7.3.外部依写形式
build.gradle
dependencies{
compile'org.hibernate:hibernate-core:3.6.7.Final'
}
外部的依
Gradle是怎找到那些外部依的文件的呢?Gradle会在一个仓库里找些文件.仓库就是文件的集合,group,
nameversion整理分.Gradle能解析好几种不同的仓库形式,比如MavenIvy,可以理解各种仓库的方法,
如使用本地文件系或者HTTP.
,Gradle不提前定任何仓库.在使用外部依之前,你需要自己至少定一个.比如使用下面例子中的Maven
central仓库:
例子7.4.Mavencentral仓库
build.gradle
repositories{
mavenCentral()
}
或者使用一个程的Maven仓库:
例子7.5.使用程的Maven仓库
build.gradle
repositories{
maven{
url"http://repo.mycompany.com/maven2"
}
}
或者一个程的Ivy仓库:
例子7.6.使用程的Ivy仓库
build.gradle
repositories{
ivy{
url"http://repo.mycompany.com/repo"
}
}
你也可以使用本地的文件系里的.MqvenIvy都支持下的本地.
例子7.7.使用本地的Ivy
build.gradle
repositories{
ivy{
//URLcanrefertoalocaldirectory
url"../local-repo"
}
}
一个目可以有好几个.Gradle会根据依序在各个找它,在第一个里找到了就不会再在第二个里找
它了.
仓库
可以在第50.6,“仓库里找到更详细的信息.
配置也可以用来布文件.些文件publicationartifacts,或者就叫artifacts.
插件可以很好的定一个目的artifacts,所以你并不需要做一些特的工作来Gradle需要布什么.你可以通
uploadArchives里加入仓库来完成.下面是一个Ivy的例子:
例子7.8.布一个Ivy
build.gradle
uploadArchives{
repositories{
ivy{
credentials{
username"username"
password"pw"
}
url"http://repo.mycompany.com"
}
}
}
,当你gradleuploadArchives,Gradle建和上你的Jar.Gradle也会生成和上ivy.xml.
你也可以布到Maven.注意你需要加入Maven插件来布一个Maven.在下面的例子里,Gradle将生成和上
pom.xml.
例子7.9.Maven
build.gradle
applyplugin:'maven'
uploadArchives{
repositories{
mavenDeployer{
repository(url:"file://localhost/tmp/myRepo/")
}
}
}
在第51,artifacts里有更加具体的介.
artifacts
Groovy,你需要使用Groovy插件.个插件展了Java插件,加入了编译Groovy的依.你的目可以包含
Groovy的源代,Java源代,或者它的混合.
Groovy快速入
看一个例子.了使用Groovy插件,加入下面的代:
例子8.1.Groovy插件
build.gradle
applyplugin:'groovy'
它也会同Java插件加入到你的目里.Groovy插件展了编译,个任会在src/main/groovy找源代
文件,并且加入了编译测试src/test/groovy里的测试源代.编译使用编译(jointcompilation)
译这些目,里的合指的是它混合有javagroovy的源文件.
使用groovy编译,你必声明Groovy的版本和Groovy的位置.你可以在配置文件里加入依,编译配置会
,然后groovy将被包含在classpath.
例子8.2.Groovy2.2.0
build.gradle
repositories{
mavenCentral()
}
dependencies{
compile'org.codehaus.groovy:groovy-all:2.3.3'
}
下面是完整的建文件:
例子8.3.完整的建文件
build.gradle
applyplugin:'eclipse'
applyplugin:'groovy'
repositories{
mavenCentral()
}
dependencies{
compile'org.codehaus.groovy:groovy-all:2.3.3'
testCompile'junit:junit:4.11'
}
gradlebuild命令将会开始编译,测试JAR文件.
一个基本的Groovy
一章描述了一个非常简单Groovy.通常,一个真正的目要比个复的多.Groovy目是一个Java,
何你可以Java目做的配置也可以Groovy目做.
24,Groovy插件有更加详细的描述,你也可以在samples/groovy里找到更多的例子.
总结
一章官网正在.没有完成.
Gradle提供了个插件用来支持网页应:War插件和Jetty插件.War插件是在Java插件的基充的用来WAR
文件.Jetty插件是在War插件的基充的,将网页应布到一个介入的Jetty容器里.
页应用快速入
建一个WAR文件,需要在目中加入War插件:
例子9.1.War插件
build.gradle
applyplugin:'war'
个插件也会在你的目里加入Java插件.gradlebuild将会编译,测试目的WAR文件.Gradle将会把源文
件包含在WAR文件的src/main/webapp.编译后的classe,和它们运行所需要的依也会被包含在WAR文件里.
建一个WAR文件
启动Web工程,目中加入Jettyplugin即可:
9.2.采用Jettyplugin启动web工程
build.gradle
applyplugin:'jetty'
由于Jettyplugin承自Warplugin.使用gradlejettyRun命令将会把你的工程启动部署到jetty容器中.gradle
jettyRunWar命令会打包并启动部署到jetty容器中.
TODO:whichurl,configureport,usessourcefilesinplaceandcanedityourfilesandreload.
Runningyourwebapplication
了解更多关于WarpluginJettyplugin26,WarPlugin以及第28,JettyPlugin.
你可以在行包的samples/webApplication下找到更多示例.
总结
本章介了命令行的一些基本功能.正如在前面的章里你所到的gradle命令来行一个.
使用Gradle命令行
你可以以列表的形式在命令行中一次用多个任.例如gradlecompiletest命令会依次compiletest,
的任也会被.些任只会被用一次,是否被包含在脚本中:即无是以命令行的形式定的任务还是依
于其它任都会被.来看下面的例子.
下面定了四个任disttestcompile,只用当compile用之后才会gradledisttest
示例10.1.
例子10.1.多任务调
build.gradle
taskcompile<<{
println'compilingsource'
}
taskcompileTest(dependsOn:compile)<<{
println'compilingunittests'
}
tasktest(dependsOn:[compile,compileTest])<<{
println'runningunittests'
}
taskdist(dependsOn:[compile,test])<<{
println'buildingthedistribution'
}
gradledisttest命令的
>gradledisttest
:compile
compilingsource
:compileTest
compilingunittests
:test
runningunittests
:dist
buildingthedistribution
BUILDSUCCESSFUL
Totaltime:1secs
由于每个任务仅会被用一次,所以gradletesttestgradletest效果是相同的.
多任务调
你可以用命令行选项-x来排除某些任,用上面的例子来示范一下.
例子10.2.排除任
gradledist-xtest命令的
>gradledist-xtest
:compile
compilingsource
:dist
buildingthedistribution
BUILDSUCCESSFUL
Totaltime:1secs
可以看到,test并没有被,即使它是dist的依.test的依compileTest也没有被,而像
compiletest和其它任的任仍然会被.
排除任
情况下,只要有任务调用失,Gradle就会中断.可能会使程更快,但那些后面藏的错误就没有发现.
所以你可以使用--continue选项在一次用中尽可能多的发现所有问题.
采用了--continue选项,Gralde用每一个任以及它的任.而不是一旦出现错误就会中断.所有错误信息都会
在最后被列出来.
一旦某个任务执行失,那么所有依的子任都不会被.例如由于testcomplie,所以如果
compile用出,test便不会被直接或.
继续执
当你试图调用某个任,你并不需要入任的全名.只需提供足的可以唯一区分出的字符即可.例如,上面的
例子你也可以么写.gradledi来直接dist:
10.3.化任
gradledi命令的
>gradledi
:compile
compilingsource
:compileTest
compilingunittests
:test
runningunittests
:dist
buildingthedistribution
BUILDSUCCESSFUL
Totaltime:1secs
你也可以用在峰命名方式(通俗的就是每个单词的第一个字母大写,除了第一个单词)的任中每个单词的首字母
.例如,可以gradlecompTest或者gradlecTcompileTest
11.4.峰方式的任
gradlecT命令的
>gradlecT
:compile
compilingsource
:compileTest
compilingunittests
BUILDSUCCESSFUL
Totaltime:1secs
化后你仍然可以使用-x参数.
化任
gradle命令,情况下是会建当前目下的文件,可以使用-b参数选择其他目建文件,并且当你使用此参
settings.gradle将不会生效,看下面的例子:
10.5.选择文件
subdir/myproject.gradle
taskhello<<{
println"usingbuildfile'$buildFile.name'in'$buildFile.parentFile.name'."
}
gradle-q-bsubdir/myproject.gradlehello
gradle-q-bsubdir/myproject.gradlehello
usingbuildfile'myproject.gradle'in'subdir'.
,你可以使用-p参数来指定建的目,例如在多建中你可以用-p来替代-b参数
10.6.选择构建目
gradle-q-psubdirhello命令的
gradle-q-psubdirhello
usingbuildfile'build.gradle'in'subdir'.
-b参数用以指定脚本具体所在位置,格式dirpwd/build.gradle.
-p参数用以指定脚本目即可.
选择文件
Gradle提供了多内置任来收集建信息.些内置任务对于了解依赖结构以及解决问题都是很有帮助的.
了解更多,可以参告插件你的目添加
建信息
gradleprojects命令会你列出子目名称列表.
10.7.收集目信息
gradle-qprojects命令的
>gradle-qprojects
------------------------------------------------------------
Rootproject
------------------------------------------------------------
Rootproject'projectReports'
+---Project':api'-ThesharedAPIfortheapplication
\---Project':webapp'-TheWebapplicationimplementation
Toseealistofthetasksofaproject,rungradle<project-path>:tasks
Forexample,tryrunninggradle:api:tasks
告展示了每个目的描述信息.当然你可以在目中用description属性来指定些描述信息.
10.8.为项目添加描述信息.
build.gradle
description='ThesharedAPIfortheapplication'
目列表
gradletasks命令会列出目中所有任.目中所有的默以及每个任的描述.
10.9取任信息
gradle-qtasks命令的
>gradle-qtasks
------------------------------------------------------------
Alltasksrunnablefromrootproject
------------------------------------------------------------
Defaulttasks:dists
Buildtasks
-----------
clean-Deletesthebuilddirectory(build)
dists-Buildsthedistribution
libs-BuildstheJAR
BuildSetuptasks
-----------------
init-InitializesanewGradlebuild.[incubating]
wrapper-GeneratesGradlewrapperfiles.[incubating]
Helptasks
----------
dependencies-Displaysalldependenciesdeclaredinrootproject'projectReports'.
dependencyInsight-Displaystheinsightintoaspecificdependencyinrootproject'projectReports'.
help-Displaysahelpmessage
projects-Displaysthesub-projectsofrootproject'projectReports'.
properties-Displaysthepropertiesofrootproject'projectReports'.
tasks-Displaysthetasksrunnablefromrootproject'projectReports'(someofthedisplayedtasksmaybelongtosubprojects).
Toseealltasksandmoredetail,runwith--all.
情况下,只会示那些被分的任.你可以通过为务设group属性和description来把些信息展示到果中.
10.10.更改任务报告内容
build.gradle
dists{
description='Buildsthedistribution'
group='build'
}
当然你也可以用--all参数来收集更多任信息.会列出目中所有任以及任的依关系.
10.11得更多的任信息
gradle-qtasks--all命令的
>gradle-qtasks--all
------------------------------------------------------------
Alltasksrunnablefromrootproject
------------------------------------------------------------
Defaulttasks:dists
Buildtasks
-----------
clean-Deletesthebuilddirectory(build)
列表
api:clean-Deletesthebuilddirectory(build)
webapp:clean-Deletesthebuilddirectory(build)
dists-Buildsthedistribution[api:libs,webapp:libs]
docs-Buildsthedocumentation
api:libs-BuildstheJAR
api:compile-Compilesthesourcefiles
webapp:libs-BuildstheJAR[api:libs]
webapp:compile-Compilesthesourcefiles
BuildSetuptasks
-----------------
init-InitializesanewGradlebuild.[incubating]
wrapper-GeneratesGradlewrapperfiles.[incubating]
Helptasks
----------
dependencies-Displaysalldependenciesdeclaredinrootproject'projectReports'.
api:dependencies-Displaysalldependenciesdeclaredinproject':api'.
webapp:dependencies-Displaysalldependenciesdeclaredinproject':webapp'.
dependencyInsight-Displaystheinsightintoaspecificdependencyinrootproject'projectReports'.
api:dependencyInsight-Displaystheinsightintoaspecificdependencyinproject':api'.
webapp:dependencyInsight-Displaystheinsightintoaspecificdependencyinproject':webapp'.
help-Displaysahelpmessage
api:help-Displaysahelpmessage
webapp:help-Displaysahelpmessage
projects-Displaysthesub-projectsofrootproject'projectReports'.
api:projects-Displaysthesub-projectsofproject':api'.
webapp:projects-Displaysthesub-projectsofproject':webapp'.
properties-Displaysthepropertiesofrootproject'projectReports'.
api:properties-Displaysthepropertiesofproject':api'.
webapp:properties-Displaysthepropertiesofproject':webapp'.
tasks-Displaysthetasksrunnablefromrootproject'projectReports'(someofthedisplayedtasksmaybelongtosubprojects).
api:tasks-Displaysthetasksrunnablefromproject':api'.
webapp:tasks-Displaysthetasksrunnablefromproject':webapp'.
gradlehelp--tasksomeTask可以示指定任详细信息.或者多建中相同任名称的所有任的信息.如下
.
10.12.取任帮助
gradle-qhelp--tasklibs
>gradle-qhelp--tasklibs
Detailedtaskinformationforlibs
Paths
:api:libs
:webapp:libs
Type
Task(org.gradle.api.Task)
Description
BuildstheJAR
果包含了任的路径、型以及描述信息等.
取任具体信息
gradledependencies命令会列出目的依列表,所有依会根据任区分,结构展示出来.如下例:
10.13.取依信息
gradle-qdependenciesapi:dependencieswebapp:dependencies
>gradle-qdependenciesapi:dependencieswebapp:dependencies
------------------------------------------------------------
Rootproject
------------------------------------------------------------
Noconfigurations
------------------------------------------------------------
Project:api-ThesharedAPIfortheapplication
------------------------------------------------------------
compile
\---org.codehaus.groovy:groovy-all:2.3.3
testCompile
\---junit:junit:4.11
\---org.hamcrest:hamcrest-core:1.3
------------------------------------------------------------
Project:webapp-TheWebapplicationimplementation
------------------------------------------------------------
compile
+---project:api
|\---org.codehaus.groovy:groovy-all:2.3.3
\---commons-io:commons-io:1.2
testCompile
Nodependencies
果很多,这对于了解建任十分有用,当然你可以通--configuration参数来指定建任的依情况:
10.14.过滤信息
gradle-qapi:dependencies--configurationtestCompile
>gradle-qapi:dependencies--configurationtestCompile
------------------------------------------------------------
Project:api-ThesharedAPIfortheapplication
------------------------------------------------------------
testCompile
\---junit:junit:4.11
\---org.hamcrest:hamcrest-core:1.3
取依列表
RunninggradledependencyInsight命令可以看指定的依.如下面的例子.
10.15.取特定依
gradle-qwebapp:dependencyInsight--dependencygroovy--configurationcompile
>gradle-qwebapp:dependencyInsight--dependencygroovy--configurationcompile
org.codehaus.groovy:groovy-all:2.3.3
\---project:api
\---compile
task于了解依关系、了解选择此版本作十分有用.了解更多DependencyInsightReportTask.
dependencyInsight'Help'务组中的一个.这项需要行配置才可以使用.Report找那些在指定的配置里特定的
.
如果用了Java相关的插件,那么dependencyInsight经预先被配置到'compile'下了.你只需要通'--dependency'参数
来制定所需看的依即可.如果你不想用默配置的参数你可以通'--configuration'参数来行指定.了解更多
DependencyInsightReportTask.
看特定依
gradleproperties可以目所有属性列表.如下例:
10.16.属性信息
gradle-qapi:properties
>gradle-qapi:properties
------------------------------------------------------------
Project:api-ThesharedAPIfortheapplication
------------------------------------------------------------
allprojects:[project':api']
ant:org.gradle.api.internal.project.DefaultAntBuilder@12345
antBuilderFactory:org.gradle.api.internal.project.DefaultAntBuilderFactory@12345
artifacts:org.gradle.api.internal.artifacts.dsl.DefaultArtifactHandler@12345
asDynamicObject:org.gradle.api.internal.ExtensibleDynamicObject@12345
baseClassLoaderScope:org.gradle.api.internal.initialization.DefaultClassLoaderScope@12345
buildDir:/home/user/gradle/samples/userguide/tutorial/projectReports/api/build
buildFile:/home/user/gradle/samples/userguide/tutorial/projectReports/api/build.gradle
目属性列表
UsingtheGradleGraphicalUserInterface
WritingBuildScripts
Tutorial-'ThisandThat'
MoreaboutTasks
WorkingWithFiles
YoucanlocateafilerelativetotheprojectdirectoryusingtheProject.file()method.
Example16.1.Locatingfiles
build.gradle
//Usingarelativepath
FileconfigFile=file('src/config.xml')
//Usinganabsolutepath
configFile=file(configFile.absolutePath)
//UsingaFileobjectwitharelativepath
configFile=file(newFile('src/config.xml'))`
Youcanpassanyobjecttothefile()method,anditwillattempttoconvertthevaluetoanabsoluteFileobject.Usually,you
wouldpassitaStringorFileinstance.Ifthispathisanabsolutepath,itisusedtoconstructaFileinstance.Otherwise,a
Fileinstanceisconstructedbyprependingtheprojectdirectorypathtothesuppliedpath.Thefile()methodalso
understandsURLs,suchasfile:/some/path.xml.
UsingthismethodisausefulwaytoconvertsomeuserprovidedvalueintoanabsoluteFile.Itispreferabletousingnew
File(somePath),asfile()alwaysevaluatesthesuppliedpathrelativetotheprojectdirectory,whichisfixed,ratherthanthe
currentworkingdirectory,whichcanchangedependingonhowtheuserrunsGradle.
Locatingfiles
Filecollections

Navigation menu