1. 配置清晰,简单易懂
2. 比Maven的配置文件更加简洁
3. 强大的Groovy脚本的支持
4. 有上面3个理由就够了
学习Gradle的入口
就像学习SpringMvc一样,首先要找到web.xml中是怎么配置的,然后才能找到各个相关的配置文件,然后具体怎么配置再一个一个的查看。
Gradle的主配置文件叫build.gradle ,其他配置文件还有setting.gradle.等等,一般还可以衍生出gradle.bat等方便的工作脚本.
关于这些gradle的脚本文件 以及常用的配置 ,作为参考后面统一罗列出来
执行gradle build
就会输出
:compileJava
:processResources
:classes
:jar
:assemble
:compileTestJava
:processTestResources
:testClasses
:test
:check
:build
BUILD SUCCESSFUL
这就是它的 java plugin
Gradle-Project
src
resources
build.gradle
setting.gradle
Project-Parent
src
resources
module1
src
resources
build.gradle
setting.gradle
module2
src
resources
build.gradle
setting.gradle
module3
src
resources
build.gradle
setting.gradle
build.gradle
setting.gradle
这是一个典型的 多模块Gradle项目.类似Maven的多Module项目。
同时子模块的定义在setting.gradle 中定义
setting.gradle
include ‘module1‘, ‘module2‘, ‘module3‘
相关子项目的build.gradle 影响自己和自己的子项目,子项目自己的build.gradle 覆盖父级配置。举个例子:
Project-Parent 中的 build.gradle 定义了一个名为hello的Task,当在Project-Parent 目录下执行gradle hello 的时候,子模块的名为hello的Task 也会一同执行。
Gradle中的Task
gradle的task相比maven ant lvy 的task更为强大,可以 实现 代码+脚本 混合编写,虽然task可以掺杂进来Groovy代码,但是这并不代表这 会影响了Gradle的Task的扩展。
在build.gradle 中 添加下面的内容,就完成了定义一个Task
task helloworld{
println “Hello World”
}
task其实是一个对象,它也会有方法和属性,同时,也会有类型。默认情况下,定义的task继承自DefaultTask。
defaultTasks ‘first‘, ‘second‘
task first {
doLast {
println "I am first"
}
}
task second {
doFirst {
println "I am second"
}
}
在gradle命令后不加入任何任务名时,就会执行默认任务。
在有的Gradle的build.gradle 文件中,会看到有的Task 定义的时候 Task名称后面还跟着一个 << 这样的符号,这其实 源于 Groovy 对 << 的重写 ,a在定义一个Task 时后面跟1个 <<
表示 把当前这个 Task 加入到执行任务列表的末尾
task initializeDatabase
initializeDatabase << { println ‘connect to database‘ }
initializeDatabase << { println ‘update database schema‘ }
initializeDatabase { print ‘configuring‘ }
initializeDatabase { println ‘database connection‘ }
执行gradle initializeDatabase 命令
输出:
print ‘configuring‘
println ‘database connection‘
println ‘connect to database‘
println ‘update database schema‘
另一段代码
// Initial task definition (maybe not easily editable)
Task setupDatabaseTests << {
println ‘load test data‘
}
// Our changes to the task (in a place we can edit them)
setupDatabaseTests {
doFirst {
println ‘create database schema‘
}
doFirst {
println ‘drop database schema‘
}
}
说明:
第一个 setupDatabaseTests << 定义一个Task,当前这个Task执行堆里面的最后一个位置,也是第一个位置的执行体 负责 输出’load test data’
在下面的 setupDatabaseTests { ..} 中定义的 第一个doFirst 指明把当前负责的内容加到 执行堆的最后一个位置. 如果这时候执行 gradle setupDatabaseTests 就会输出 ‘create …load …’
在下面的 setupDatabaseTests { ..} 中定义的 第二个doFirst 指明把当前负责的内容加到 执行堆的最后一个位置.
当执行整个计划的时候,当然 是从 堆顶 一个一个的pop的执行了
task task1{
println ‘Task1‘
}
task task2(dependsOn:task1){
println ‘Task2‘
}
执行gradle task2
输出
Task1
Task2
task task3{
println ‘Task3‘
}
task task4{
println ‘Task4‘
}
task task5(dependsOn:[task3,task4]){
println ‘last Task‘
}
执行gradle task5
输出
Task3
Task4
last Task
build.gradle
class HelloWorldTask extends DefaultTask {
@Optional
String message = ‘I am davenkin‘
@TaskAction
def hello(){
println "hello world $message"
}
}
task hello(type:HelloWorldTask)
task hello1(type:HelloWorldTask){
message ="I am a programmer"
}
在本例中,就是 在 当前配置文件内,写了一段 Groovy 代码,可以看到在Task的参数内通过加入type 参数来灵活的切换 当前Task的实现
task copyFiles(type: Copy) {
from ‘resources‘
into ‘target‘
include ‘**/*.xml‘, ‘**/*.txt‘, ‘**/*.properties‘
}
apply plugin: ‘java‘
task customJar(type: Jar) {
manifest {
attributes firstKey: ‘firstValue‘, secondKey: ‘secondValue‘
}
archiveName = ‘hello.jar‘
destinationDir = file("${buildDir}/jars")
from sourceSets.main.classes
}
apply plugin: ‘java‘
repositories {
mavenCentral()
}
dependencies {
runtime ‘commons-codec:commons-codec:1.5‘
}
task encode(type: JavaExec, dependsOn: classes) {
main = ‘org.gradle.example.commandline.MetaphoneEncoder‘
args = "The rain in Spain falls mainly in the plain".split().toList()
classpath sourceSets.main.classesDir
classpath configurations.runtime
}
class HelloWorldTask extends DefaultTask {
@Optional
String message = ‘I am davenkin‘
@TaskAction
def hello(){
println "hello world $message"
}
}
task hello(type:HelloWorldTask)
task hello1(type:HelloWorldTask){
message ="I am a programmer"
}
在上例中,我们定义了一个名为HelloWorldTask的Task,它需要继承自DefaultTask,它的作用是向命令行输出一个字符串。@TaskAction表示该Task要执行的动作,即在调用该Task时,hello()方法将被执行。另外,message被标记为@Optional,表示在配置该Task时,message是可选的。在定义好HelloWorldTask后,我们创建了两个Task实例,第一个hello使用了默认的message值,而第二个hello1在创建时重新设置了message的值。
package davenkin
import org.gradle.api.*
import org.gradle.api.tasks.*
class HelloWorldTask extends DefaultTask {
@Optional
String message = ‘I am davenkin‘
@TaskAction
def hello(){
println "hello world $message"
}
}
这里,我们将HelloWorldTask定义在了davenkin包下,因此在build.gradle文件中引用该Task时,我们需要它的全名称:
task hello(type:davenkin.HelloWorldTask)
task hello1(type:davenkin.HelloWorldTask){
message ="I am a programmer"
}
http://www.cnblogs.com/CloudTeng/p/3421934.html?utm_source=tuicool
${ name}
${path}
def Afile = file(‘..’)
Afile.file();
def Afiles = files(‘..’)
Afiles.fileslist();
执行gradle命令时加上--daemon参数,或者-m参数。中止Gradle守护进程的方法是执行gradle -stop命令。
Gradle在默认情况下已经为Project定义了很多Property,其中比较常用的有:
project:Project本身
name:Project的名字
path:Project的绝对路径
description:Project的描述信息
buildDir:Project构建结果存放目录
version:Project的版本号
配置文件式定义
在项目目录下新建一个纯文本文件:gradle.properties。在此文件中写入键值对,就可以了。
· 从其它构建文件读取配置信息
· build.gradle
apply from: ‘other.gradle‘
· other.gradle
println “configuring $project”
task hello ? {
· println ‘hello from other script‘
}
· 判断项目中是否有设置某个属性
hasProperty(‘propertyName‘)
执行gradle properties
执行gradle tasks
执行gradle --daemon
执行gradle build
执行gradle jar
执行gradle war
原文:http://my.oschina.net/httpssl/blog/498853