最近一直在用Gradle来构建java应用,但是对于Gradle文件的写法不是很了解,一直都是跟度娘进行沟通。现在正好总结一下项目中用到的一些用法。
1. 引入插件包
一个项目中只放置一个build.gradle,build.gradle可以理解为一个Project框架,提供了对一个项目的基本配置。如果需要执行更过的task,比如对java进行编译、打包、部署、移动等操作,就需要引入相应的插件,或者自己写脚本。一般情况下,都是引入插件,然后再指定自己的task,这样减少很多的代码量,提高效率。
apply from: 'dependency.gradle' // 加载本地插件
apply plugin: 'java' // 加载java插件
apply plugin: 'eclipse'
apply plugin: 'base'
加载了相应的插件后,在gradle task中就会显示插件提供的方法。
一般java项目都会加载 java , base 两个插件,我用的是eclipse,所以也将eclipse插件引进来了。
2. 设置工程 source 目录
// 设置sourceSets,只是project的属性
sourceSets {
// 设置main source, 打包需要用到的资源
main {
java{
srcDirs = ['src/main/java']
}
resources {
srcDirs = ["src/main/resources", "config"] // 我在这里多加了一个 config 包
}
}
// 设置test source, 单元测试所需的资源
test {
java{
srcDirs = ['src/test/java']
}
resources {
srcDirs = ['src/test/resources']
}
}
}
一般java项目的默认source都跟上面相同,只是我多加了一个source包:config。
** 一定要记住哦,source路径 是不计算在 package包路径中的。
3. Project中常用的属性配置
version = 1.0 // 项目版本(全局的)
sourceCompatibility = 1.8 // source使用的jdk版本
targetCompatibility = 1.8 // 编译时使用的jdk版本
compileJava.options.encoding = 'UTF-8' //
compileTestJava.options.encoding = 'UTF-8' //
4. 打jar包并复制
// 定义一个task, 继承自 jar task, 并依赖于 compileJava task
task assembleProject1Jar(type: Jar, dependsOn:[compileJava]) {
onlyIf { !sourceSets.main.allSource.files.isEmpty() }
// 打包后的jar基本名
baseName 'project1'
// version
version ''
// 选择编译后的class进行打包
from ('build/classes/java/main/')
include (['priv/allen/common/entity/*.class',
'priv/allen/common/controller/*.class',
'priv/allen/common/service/*.class',
'priv/allen/common/dao/*.class'])
// 打包后的操作
doLast {
copy {
from('build/libs') {
include baseName + version + '.jar'
}
// 将打好的jar包复制到 workspace 中的另一个工程下
into('../Project2/lib')
}
}
}
5. 在task执行后做一些操作
clean.doLast {
if (file('target').exists()) {
file('target').deleteDir()
}
}
如果需要在 clean 操作后面添加一些额外的操作,可以采用 doLast 语法。