以前这个gradle都是给Android使用的,万万没想到,Java的其它项目也能使用,甚至能替代maven或者说maven和gradle项目是可以互相转换的。还有就是在使用svn来管理项目的时候,每个svn版本都对应一个数字,但是换了git之后,每个提交记录就不是简单的生成个int数字,还是递增的数字了,对应的是个hash值,类似Java对象的hashcode,这个时候就希望,每次项目打包之后,产生出来的jar包带上这个git版本号,虽然不似svn那样一个简单的int数字就能说明版本,但是git的hash值还是可以凑合用的,也能对应找到提交版本记录。
首先在最外层的根 build.gradle文件里面定义几个全局的方法,子模块项目就可以直接使用,而不用再复制一次。
static def gitHashAndBuildTime() {
return "-" + getGitSHA() + "-" + releaseTime()
}
static def releaseTime() {
return new Date().format("yyyy-MM-dd HH:mm", TimeZone.getTimeZone("GMT+08:00"))
}
static def getGitSHA() {
return 'git rev-parse --short HEAD'.execute().text.trim()
}
releaseTime()方法:获取当前的时间。日期格式化,差不多就是上面的形式。根Java的日期格式化差不多。
getGitSha()方法:就是获取当前分支的 git hashcode的值。
gitHashAndBuildTime() 方法:也是全局变量,直接把上面的2个值拼在一起,自模块打包jar的时候,就可以直接使用了。
也可以单独调用下面的2个方法。
使用这几个定义的方法
def artifactId = "xxx-lxk"
jar.doFirst {
manifest {
attributes("Manifest-Version": "1.0",
"Created-By": 'x',
"Implementation-Title": 'xxx',
"Implementation-Version": version,
"Implementation-Vendor": "xxx",
"Class-Path": configurations.compile.collect { it.getName() }.join(' ')
)
}
baseName = artifactId + gitHashAndBuildTime()
}
重点就是在打jar包打时候,有个关键字 baseName,修改这个值,就会修改最终生成打jar打名称。