最近一直在用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 语法。
6. gradle中的常用属性可以写在gradle.properties中
一个gradle文件中的属性有很多,比如 jdk版本,编码类型,dependency 版本。如果都放在 build.gradle 中势必不好管理哦(经验哦),那么gradle默认提供了一个 gradle.properties 文件。用这个文件来管理所有的属性在合适不过了,下面就来试试哦!
gradle.properties:
jdkVersion= 1.8
encodingType= UTF-8
configFile = config.gradle
## --- group id, artifact id, version -----
GroupId = priv.allen.sso
projectVersion = 1.0
springBootVersion = 2.0.3.RELEASE
我们将一些常用的属性都定义在了上面这个文件中,那么在gradle脚本中就可以直接使用了,看代码:
build.gradle:
apply from: "${configFile}" // 引用了另一个配置文件
apply plugin: 'java'
apply plugin: 'jacoco'
apply plugin: 'base'
apply plugin: 'eclipse'
apply plugin: 'maven'
apply plugin: 'maven-publish'
sourceCompatibility = jdkVersion
targetCompatibility = jdkVersion
compileJava.options.encoding = encodingType
compileTestJava.options.encoding = encodingType
group = GroupId
version = projectVersion
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
//classpath 'org.springframework:springloaded:1.2.7.RELEASE'
}
}
简单不,在 gradle.properties 文件定义的所有属性(常量),就可以拿来用哦,引用变量值的用法: ${varName} 。
注意哦,这个文件中的第一行还有一种用法,引用了一个外部配置文件:config.gradle (这个名字可以随便起,这是我们自己定义的)。必须在gradle文件中使用 apply from 语法引入进来才可以使用,我们在这个文件中放置了一些 ext 变量,以便支持不同的环境(windows, linux等),每一个环境对应一个config文件,需要的时候切换。
config.gradle(我这里是随便写了个例子):
ext{
nameList =[
"bom",
"detail",
"feeding",
"component",
"dataprocess",
"parse",
"roduct_config_setting",
"product_setting",
"product_uph_setting",
"vendor",
"workorder",
"sap"
]
}