3

私はbuild.gradleにこれを持っています:

task cleanCommon(type: GradleBuild) {
  buildFile = 'common/build.gradle'  
  tasks = ['clean']  
}

task cleanCrawler(type: GradleBuild) {
  buildFile = 'crawler/build.gradle'
  tasks = ['clean']
}

task cleanPortlet(type: GradleBuild) {
  buildFile = 'portlet/build.gradle'
  tasks = ['clean']
}

task cleanAll(dependsOn: ['cleanCommon', 'cleanCrawler', 'cleanPortlet']) { 
}

とても冗長です。以下の疑似コードのようなことを行う方法はありますか?

taskCleanAll {
    GradleBuild.pleaseRunTask('common/build.gradle', 'clean')
    GradleBuild.pleaseRunTask('crawler/build.gradle', 'clean')
    GradleBuild.pleaseRunTask('portlet/build.gradle', 'clean')
}
4

3 に答える 3

7

タスクを直接呼び出すことはできませんが、コードを抽象化する方法は他にもたくさんあります。例えば:

def createBuildTask(name, buildFile) {
    task "$name"(type: GradleBuild) {
        buildFile = buildFile
        tasks = ['clean']
    }
}  

createBuildTask("cleanCommon", "common/build.gradle")
createBuildTask("cleanCrawler", "crawler/build.gradle")
createBuildTask("cleanPortlet", "portlet/build.gradle")

GradleBuildそもそもなぜこのタスクを使うのかしらと思いますが、それは別の議論です。

于 2012-12-04T16:41:58.830 に答える
1
def List buildFileList = ['common/build.gradle', 'crawler/build.gradle', 'portlet/build.gradle']

task cleanAll << {
    buildFileList.each() {
        def tempTask = tasks.create(name: "execute_$it", type: GradleBuild)
        tempTask.buildFile="$it"
        tempTask.tasks = ['clean']
        tempTask.execute()
    }
}
于 2016-01-26T09:04:44.420 に答える
0

このようなものが機能する可能性があります...これはテストされていないことに注意してください。しかし、なぜそんなに冗長だと思いますか? 私はそのようにかなりきれいだと思います。

task cleanAll << {
  StartParameter startParameter = project.gradle.startParameter.newBuild()
  startParameter.tasks = ['clean']
  runGradle('portlet/build.gradle', startParameter)
  runGradle('crawler/build.gradle', startParameter)
  runGradle('common/build.gradle', startParameter)
}

def runGradle(buildFile, params) {
  params.buildFile = buildFile
  GradleLauncher.newInstance(params).run().rethrowFailure();
}

別のオプションは、タスクの作成を抽出することです。

task cleanAll
def createCleanTask(name) {
  task "${name}Clean"(type: GradleBuild) {
    tasks = ['clean']
    buildFile = "${name}/build.gradle"
  }
  cleanAll.dependsOn("${name}Clean")
}

createCleanTask("crawler")
createCleanTask("portlet")
createCleanTask("common")
于 2012-12-04T13:24:25.120 に答える