Gradle

Gradle案例

Project && task

Groovy基本语法

构建任务&运行

1
2
3
4
5
6
7
8
9
10
11
12
task hello{
doLast {
println 'Hello world'
}
}
//改良
task hello << {
println 'Hello world'
}
//命令行
> gradle -q hello
Hello world
  • gradle 构建脚本+ 运行脚本

运行任务前要依赖的任务

1
2
3
4
5
6
7
8
9
10
task "task$counter" << {
println " I'm task number $counter"
}
//加入依赖
task0.dependsOn task2, task3

> gradle -q task0
I'm task number 0
I'm task number 2
I'm task number 3
  • 喝水需要有杯子和烧好的水

声明任务之间的运行顺序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
task after(dependsOn: 'before') << {
println 'after'
}
task before << {
println 'before'
}
> gradle -q after
before
after

task hello << {
println 'hello'
}
hello.doFirst {
println 'ask:'
}
hello.doLast {
println 'shank hands'
}
hello << {
println 'leave'
}
// << 是 doLast 简写
// $hello.name 会出来 hello
//获取当前任务的名字
>gradle -q hello
  • 喝水前要拿杯子,喝完要洗杯子

任务参数化

1
2
3
4
5
6
7
8
task myTask{
ext.myProperty = "myValue"
}
task printTaskProperty << {
println myTask.myProperty
}
> gradle -q pritnTaskProperty
myValue
  • 杯子的名字

Ant构建工具

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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]}"
}
}

}
//遍历 ../antLoadfileResources 所有文件 打印出来
> 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 ***
  • 脚本->任务管理+自动化

Java构建入门

项目编译class、打包jar、运行javac

  • gradle bulid: 编译测试代码,并生成含所有类和资源的jar文件。
    1. clean:删除build的所有东西
    2. assemble: 编译 & 打包代码-> 可执行文件
    3. check:编译 & 测试

外部依赖

  • 提取 & 放入 依赖

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //加入依赖
    // commons-coolections 加入编译阶段
    // junit 加入到了测试编译阶段.
    dependencies{
    compile group: 'commons-coolections', name: 'commons-collections', version: '3.2'
    testCompile group: 'junit', name: 'junit', version: '4.+'
    }
    //远程仓库
    repositories{
    maven{
    url 'http://alibaba~~~~~/re~~/'
    }
    }

定制项目

  • 项目名+版本号 定制 MANIFEST.MF 文件
1
2
3
4
5
6
7
sourceCompatibility = 1.5
version = '1.0'
jar {
manifest {
attributes 'Implementation-Title': 'myfirstProject', 'Implementation-Version': version
}
}

发布JAR文件

  • 本地仓库repos中

  • gradle uploadArchives命令发布jar文件

  • 1
    2
    3
    4
    5
    6
    7
    uploadArchives{
    repositories{
    flatDir{
    dirs 'repos'
    }
    }
    }

合并

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
//------------------------------加入插件
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.+'
}
//------------------------------

//------------------------------测试时添加key value
test {
systemProperties 'property': 'value'
}
//------------------------------

//------------------------------ 打包上传仓库
uploadArchives {
repositories {
flatDir {
dirs 'repos'
}
}
}

多项目构建

0%