Gradle 梯度任务不应自动执行
我正在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
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
}
}