如何消除渐变任务中的重复



我有两个任务来启动Java程序。他们非常相似。我该如何消除它们之间的重复,尤其是因为我几乎肯定会在项目中添加更多的启动器?

task(exportBallsThrownDetails, dependsOn: 'classes', type: JavaExec) {
// https://github.com/gradle/gradle/issues/14363
javaLauncher = javaToolchains.launcherFor {
languageVersion = JavaLanguageVersion.of(17)
}
mainClass = 'ca.jbrains.wcbt.ExportBallsThrownDetails'
classpath = sourceSets.main.runtimeClasspath
workingDir = rootProject.projectDir
args ''
}
task(exportGameSummaries, dependsOn: 'classes', type: JavaExec) {
// https://github.com/gradle/gradle/issues/14363
javaLauncher = javaToolchains.launcherFor {
languageVersion = JavaLanguageVersion.of(17)
}
mainClass = 'ca.jbrains.wcbt.ExportGameSummaries'
classpath = sourceSets.main.runtimeClasspath
workingDir = rootProject.projectDir
args ''
}

我了解到有一种新的方法来声明任务(我使用的是Gradle 7.x(,这使得如何使用我对Groovy的基本知识提取重复代码变得更加明显。

基本思想包括提取一个函数,该函数使GradleTask对象的状态发生变化。这部分是简单的Groovy,具有Task接口的知识。

/*
* I am grateful to https://twitter.com/Neppord for suggesting this approach.
* I used the guide at https://docs.gradle.org/current/userguide/more_about_tasks.html
* and my rudimentary knowledge of Groovy, obtained in the early 2010s by spending
* a few days working with Energized Work, thanks to https://www.linkedin.com/in/energizr
*/
def configureTaskToLaunchTheEntryPointInJava17UsingTheProjectRootAsItsWorkingDirectory(Task task, String entryPointClassName) {
task.dependsOn tasks.classes
// https://github.com/gradle/gradle/issues/14363
task.javaLauncher = javaToolchains.launcherFor {
languageVersion = JavaLanguageVersion.of(17)
}
task.mainClass = entryPointClassName
task.classpath = sourceSets.main.runtimeClasspath
task.workingDir = rootProject.projectDir
task.args ''
}
tasks.register('exportBallsThrownDetails', JavaExec) {
configureTaskToLaunchTheEntryPointInJava17UsingTheProjectRootAsItsWorkingDirectory(it, 'ca.jbrains.wcbt.ExportBallsThrownDetails')
}
tasks.register('exportGameSummaries', JavaExec) {
configureTaskToLaunchTheEntryPointInJava17UsingTheProjectRootAsItsWorkingDirectory(it, 'ca.jbrains.wcbt.ExportGameSummaries')
}

我认为更多的重构是可能的,但这对我来说已经足够了。

最新更新