说gradle是当下很火热的构建工具,遂试试
Gradle是基于Groovy 高可扩展的DSL开发的企业级构建工具
特性
-
声明式构建,惯例构建
-
好多条,自行看
基本构建脚本
默认构建脚本名为build.gradle 可以用-b 参数指定 其他文件名
说是构建脚本,其实是符合dsl规范的 groovy 代码
groovy是与java无缝兼容的,so团队成员很容易上手使用,写构建脚本 就是 写 java 函数
Gradle中2个基本概念
project 和 task
project项目是个逻辑概念可大可小,你可以组织任何你想要的东西 为 一个project ,有一些列的task
task 任务 类似ant 的target,是构建可执行命令 任务,  一个 任务 是由一系列 动作action的组合 来执行的
编写构建脚本其实就是组合排列 各个action和安排action中所需要的内容,java函数编程
从maven的pomx.ml文件生成gradle项目:
gradle init --type pom
type现阶段有限的支持从pom,java-library ,scala-library, groovy-library, 默认为 basic类型的工程
build.gradle示例
//使用一些插件
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'application'
version = '1.0'
/*
使用oschina的maven库 此处用 // 类型的注释会报错,不知为何
*/
repositories {
maven{
url "http://maven.oschina.net/content/groups/public/"
}
maven{
url "http://maven.oschina.net/content/repositories/thirdparty/"
}
mavenCentral()
}
//GBK 注释乱码
[compileJava, javadoc, compileTestJava]*.options*.encoding = 'UTF-8'
//依赖管理
dependencies {
compile(
'org.apache.logging.log4j:log4j-api:2.0-rc1',
'org.apache.logging.log4j:log4j-core:2.0-rc1',
'com.google.guava:guava:17.+'
)
testRuntime(
'junit:junit:4.+'
)
}
jar {
manifest {
//打包时 给manifest 一些属性
attributes 'Implementation-Title': 'Gradle Tlog', 'Implementation-Version': version
}
}
uploadArchives {
repositories {
flatDir {
//发布jar包到 仓库中
dirs 'C:\\Users\\qingfeng\\.m2\\repository\\org.qingfeng.loggertest'
}
}
}
sourceSets.all {
println name
}
task startrun << {
}
//任务依赖
task taskName(dependsOn: 'taskXYZ') << {
//一些列的action,其实你可以认为就是java代码
String someString = 'mY_nAmE'
println "Original: " + someString
println "Upper case: " + someString.toUpperCase()
}
//使用创建好的task
task hello << {
println 'Hello Earth'
}
hello.doFirst {
println 'Hello Venus'
}
hello.doLast {
println 'Hello Mars'
}
hello << {
println 'Hello Jupiter'
}
//生成动态任务
4.times { counter ->
task "task$counter" << {
println "I'm task number $counter"
}
}
task0.dependsOn task2, task3
//任务中使用自定义方法
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"
}
}
//Methods 任务可以调用方法
File[] fileList(String dir) {
file(dir).listFiles({file -> file.isFile() } as FileFilter).sort()
}