Gradle 梯度任务不应自动执行

Gradle 梯度任务不应自动执行,gradle,android-gradle-plugin,Gradle,Android Gradle Plugin,我正在gradle中定义一项任务: task releaseCandidate(type: Exec) { commandLine 'git', 'checkout', 'develop' // Increment version code in Manifest String manifest = new File('AndroidManifest.xml').getText('UTF-8') Pattern pattern = Pattern.compile

我正在gradle中定义一项任务:

task releaseCandidate(type: Exec) {
    commandLine 'git', 'checkout', 'develop'

    // Increment version code in Manifest
    String manifest = new File('AndroidManifest.xml').getText('UTF-8')
    Pattern pattern = Pattern.compile('android:versionCode="([0-9]+)"')
    Matcher matcher = pattern.matcher(manifest)
    matcher.find()
    int newVersionCode = Integer.parseInt(matcher.group(1)) + 1
    manifest = manifest.replaceAll(
        "android:versionCode=\"([0-9]+)\"", "android:versionCode=\"$newVersionCode\""
    )
    new File('AndroidManifest.xml').write(manifest, 'UTF-8')

    commandLine 'git', 'diff'
}
只有当我显式地将其称为
gradle releaseCandidate
时,我才想执行它但是,当我运行任何其他任务时,例如
gradle assembleDebug
,它也会运行task releaseCandidate。
我不希望发生这种行为。没有任务取决于releaseCandidate,反之亦然


我的项目是安卓应用程序,所以我使用的是
Android
gradle插件。

一个常见的陷阱。向任务添加操作,否则代码将在配置阶段运行。带操作的示例任务:

task sample << {
}

任务示例您正在混合任务配置和groovy代码。任务定义主体的所有内容都将在配置阶段执行。
任务任务1仅用于在实际使用Exec的情况下完成@Opal回答(例如命令行参考):


任务任务1。我知道了
嗯,好的。您知道现在如何配置它吗?如果没有,请随时提出进一步的问题。

task task1 {
  doLast {
    code
  }
}

task releaseCandidate(type: Exec) {
    commandLine 'git', 'checkout', 'develop'

    doLast {
    // Increment version code in Manifest
    String manifest = new File('AndroidManifest.xml').getText('UTF-8')
    Pattern pattern = Pattern.compile('android:versionCode="([0-9]+)"')
    Matcher matcher = pattern.matcher(manifest)
    matcher.find()
    int newVersionCode = Integer.parseInt(matcher.group(1)) + 1
    manifest = manifest.replaceAll(
        "android:versionCode=\"([0-9]+)\"", "android:versionCode=\"$newVersionCode\""
    )
    new File('AndroidManifest.xml').write(manifest, 'UTF-8')
    }
}
task task1 << {
   exec {
        List<String> arguments = new ArrayList<String>()
        //..
        commandLine arguments
   }
}