Gradle .execute方法在Gradle更新后显示错误

时间:2019-05-30 09:30:48

标签: android gradle groovy build.gradle

在更新到版本3.0.1之后,我的项目在gradle插件版本3.4.1上运行得非常好。

以前,我使用的是包装器4.10.1,现在已更新为5.1.1

afterEvaluate(new Action<Project>() {

@Override
void execute(Project project) {
    tasks.getByName("assembleRelease").doLast {
        tasks.copyReleaseBuild.execute() //error is here
        tasks.copyReleaseBuildToXX.execute()
        tasks.copyReleaseBuildToXXXX.execute()
    }
}

copyReleaseBuild任务的内容如下所示……

task copyReleaseBuild(type: Copy) {
    def releaseDir = getProjectProperty('releaseDir')
    if (releaseDir?.trim()) {
    //if release folder is provided
    def releaseAarFile =
            getProjectProperty('sourceCodeDir') + "/android-corekit/kit/build/outputs/aar/kit-release.aar"
    from releaseAarFile
    into releaseDir
    }

task copyReleaseBuildToXX(type: Copy) {
        from "./build/outputs/aar/kit-release.aar"
        into "../kitwrapper/libs"
    }

task copyReleaseBuildToXXXX(type: Copy) {
        from "./build/outputs/aar/kit-release.aar"
        into "../kitwrapperapp/libs"
    }
}

最近两天我一直在努力解决问题,但是由于我缺乏常规知识,所以没有任何效果。

请检查我在构建项目时得到的错误日志... error log

2 个答案:

答案 0 :(得分:2)

发生这种情况是因为您使用的是gradle的更新版本(请检查Numpy, Pandas: what is the fastest way to calculate dataset row value basing on previous N values?

  

TaskInternal的以下属性和方法已删除-使用任务依赖项,任务规则,可重用的实用程序方法或Worker API代替直接执行任务。

     
      
  • execute()
  •   
  • 执行者
  •   
  • getValidators()
  •   
  • addValidator()
  •   

现在您不能直接调用execute方法,但是必须使用任务依赖项才能获得相同的结果。

只需在您的build.gradle中定义:

task copyReleaseBuild {
    dependsOn 'assembleRelease'
    //...
}

并删除此内容:

afterEvaluate(new Action<Project>() {

@Override
void execute(Project project) {
    tasks.getByName("assembleRelease").doLast {
        tasks.copyReleaseBuild.execute() //error is here
    }
}

答案 1 :(得分:1)

Upgrading your build from Gradle 4.x to 5.0

TaskInternal的以下属性和方法已删除-使用任务依赖项,任务规则,可重用的实用程序方法或Worker API代替直接执行任务。

  • execute()
  • 执行者
  • getValidators()
  • addValidator()

在您看来,您在任务之间有依赖性:copyReleaseBuild必须在assembleRelease之后运行

因此,这个简单的build.gradle代表了这种依赖性:

task copyReleaseBuild {
    dependsOn 'assembleRelease'
    doLast {
        println 'run copyReleaseBuild'
    }
}
task assembleRelease {
    doLast {
        println 'run assembleRelease'
    }
}

和命令gradle copyReleaseBuild 运行两个任务:

# gradle copyReleaseBuild

> Task :assembleRelease
run assembleRelease

> Task :copyReleaseBuild
run copyReleaseBuild

BUILD SUCCESSFUL in 2s
2 actionable tasks: 2 executed