如何从任何子项目目录启动 gradle 的正确版本?

How can I launch the correct version of gradle from any sub-project directory?

所以我的想法是,无论我在哪个子项目中,无论我正在处理哪个 SCM 项目签出,我都想启动 Gradle 的正确包装版本。

例如,如果我有一个项目 A,它有两个子项目 B 和 C,我应该能够在 B 或 C 中并在项目 A 中获得 gradle 包装器的正确版本。 ...可是等等。还有更多。 ;-)

它还需要在我刚刚签出的项目 Q 上工作,它有子项目的 Z 和 Y。换句话说,如果我正在工作,我不想得到项目 A 的包装器在 Y 中。我想要项目 Q 的版本。

我有一个 BASH 功能(您可以像别名一样使用它),但我愿意将这些积分交给任何拥有等于或优于积分的人。如果没有,我会 post 我的答案。

这是我一直在使用的:

function gradle {
    CURDIR=`pwd`
    NOERR=true
    while [[ ! -e "${CURDIR}/gradlew" ]]
    do
        CURDIR="$(dirname "$CURDIR")"
        if [[ "${CURDIR}" == "/" ]]; then
            echo "Failed to find gradlew in any parent dir. Are you sure this is a Gradle project?"
            NOERR=false
            break   
        fi      
    done

    if [[ $NOERR ]];then
        ${CURDIR}/gradlew $@
    fi  
}

find-gradle 提供了系统 Gradle 的可能性,但这个系统很方便,因为它进入您的 .bashrc 并使用 gradle 名称。 find-gradle 中的循环绝对更清晰。可能还想更改错误消息。将它放在您的 .bashrc 中的事情是您可以放心,除非您失去对整个盒子的访问权限,否则不会有人拿走您的权限。 ;-)