(Gradle)多项目模块下,gradle如何获取子模块的git当前分支

最近就有个鬼需求,需要在对项目模块下,获取指定子模块的在git中的当前分支。

先说一下多模块,我的这里以两个Springboot项目为例:ql-sample,ql-redis

1. ql-sample就是入口程序

2. ql-redis是一个子模块项目,关于连接redis的

我在主程序ql-sample中通过settings.gradle

//ql-sample和ql-redis处于同一目录下才可以这么用
includeFlat 'ql-redis'

这样就将 ql-redis引入进来了

现在我希望在 ql-redis中的build.gradle中,通过自定义方法获取ql-redis当前所属的git分支(因为是两个项目,git仓库也是分开的,ql-sample当前处于master分支上,ql-redis处于dev分支上)

最开始我想的比较简单,直接在ql-redis中的build.gradle中写个方法,执行一下git获取当前分支的命令不就可以了嘛,so easy!我随意去网上抄了一份代码

task gitBranch() {
    def branch = ""
    def proc = "git rev-parse --abbrev-ref HEAD".execute()
    proc.in.eachLine { line -> branch = line }
    proc.err.eachLine { line -> println line }
    proc.waitFor()
    println branch
}

本以为执行一下task,问题就迎刃而解,没想到

打印了一个master,卧槽,不会是我将ql-redis切换到master分支了吧,吓得我赶紧检查了一遍

没问题呀,就是dev,为啥会打印一个master???

百思不得其解!

尝试了许久,还是不行,我想着,我干脆读文件吧,每个项目下面都有个.git文件夹,里面肯定有相关的分支信息

看了一下,里面有个HEAD文件,里面的内容正合我意

最后的就是我想要的dev,我就又去网上抄了一份代码

task loadConfig() {
    def config = new File("./.git/HEAD")
    String content = ""
    config.eachLine { line ->
        content = line
    }
    def split = content.split("/")
    println split[split.size()-1]
}

心想,这样总没问题了吧,可是

结果是令人绝望的,还是master。抓狂头秃有没有,明明ql-sample才是master分支,为啥在ql-redis的gradle里面会出现这种结果。

解决方案:

只要下面的代码才能正确获取

task loadConfig() {
    def config = file("./.git/HEAD")
    String content = ""
    config.eachLine { line ->
        content = line
    }
    def split = content.split("/")
    println split[split.size()-1]
}

new File换为file

这样才能正常获取到当前分支

具体原因未知,猜想是当ql-sample引入ql-redis模块的时候,ql-redis的gradle已经被合并到ql-sample里面了,就会出现以上情况。

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值