当前位置: 首页 > 知识库问答 >
问题:

错误:未找到自定义方法的Gradle DSL方法

饶德本
2023-03-14

我在构建中添加自定义方法时遇到问题。gradle文件来检索git分支并提交哈希。这是我的密码:

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "***.***.***"
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        buildConfigField "String", "GIT_HASH", getGitHash()
        buildConfigField "String", "GIT_BRANCH", getGitBranch()
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    def getGitHash = { ->
        def stdout = new ByteArrayOutputStream()
        exec {
            commandLine 'git', 'rev-parse', 'HEAD'
            standardOutput = stdout
        }
        return "\"" + stdout.toString().trim() + "\""
    }

    def getGitBranch = { ->
        def stdout = new ByteArrayOutputStream()
        exec {
            commandLine 'git', 'rev-parse', '--abbrev-ref', 'HEAD'
            standardOutput = stdout
        }
        return "\"" + stdout.toString().trim() + "\""
    }
}

问题出在哪里?我得到了以下错误:

BUILD FAILED in 0s
ERROR: Gradle DSL method not found: 'getGitHash()'

我的gradle插件版本是3.5

共有2个答案

岳晟
2023-03-14

问题在于getGitHashgetGitBranch方法的定义在构建的android。格雷德尔档案。相反,它们需要位于android部分之上。例如:

def getGitHash = { ->
    def stdout = new ByteArrayOutputStream()
    exec {
        commandLine 'git', 'rev-parse', 'HEAD'
        standardOutput = stdout
    }
    return "\"" + stdout.toString().trim() + "\""
}

def getGitBranch = { ->
    def stdout = new ByteArrayOutputStream()
    exec {
        commandLine 'git', 'rev-parse', '--abbrev-ref', 'HEAD'
        standardOutput = stdout
    }
    return "\"" + stdout.toString().trim() + "\""
}

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "***.***.***"
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        buildConfigField "String", "GIT_HASH", getGitHash()
        buildConfigField "String", "GIT_BRANCH", getGitBranch()
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

这样做已解决问题

督劲
2023-03-14

gradle中定义的自定义方法“getGitHash()”只在这个gradle文件中可用。请检查一下你是否是从外面打来的。你还需要在使用方法之前定义它,也就是说,把它放在你的代码上面。

 类似资料:
  • 问题内容: 我正在尝试根据指南制作一个简单的Android应用程序。我正在使用下面的代码,但它给了我几个错误。尝试覆盖该方法时抱怨。确切的错误如下。谁能解释我在这里犯什么错误? 确切的错误: 问题答案: 您应该从Activity类扩展。因为您只是在创建新类,而没有任何可以从父类覆盖的方法。

  • 我正在学习Ruby,我有一个无法理解的bug。我有一个方法,它接受一个字符串(行)数组,并删除所有行,直到包含模式的某一行。该方法如下所示: 这工作正常,生成的字符串(行)正确显示在我正在生成的网页上。 此外,我想删除该模式后面的所有非空行。我修改了方法如下: 令人惊讶的是(至少对我来说)这不起作用。在生成的网页上,我看到的不是内容,而是错误消息:Liquid error:nil类的未定义方法“[

  • 我面临着这个奇怪的错误,我在jsp中使用了标记,而我使用的属性名抛出了一个错误。 以下是我在

  • 错误在最后一行,我想知道到底出了什么问题,以及如何修复它,谢谢!

  • 我正在尝试使用Spring Boot 1.5.9在Spring数据存储库中实现自定义方法。释放我创建了存储库: 提供了自定义存储库: 以及实施: 此外,我还提供了一个调用: 只是由spring初始值设定项生成的普通xml: 在Spring Boot 1.5.9上运行项目时。RELEASE我在容器创建时遇到了一个问题: 将Spring Boot版本更改为2.1.9。发布效果很好,给了我预期的结果。

  • 我刚刚创建了php web服务器并将其连接到firebase。当我尝试身份验证时,注册工作正常。但问题在于登录。它不断出现以下错误: 致命错误:未捕获错误:调用未定义的方法Kreait\Firebase\Auth::在 /Applications/XAMPP/xamppfiles/htdocs/firebase_series/authActions.php:24Stack跟踪:#0{main}抛出