使用Gradle,是否可以直接调用GradleBuild而不是将其指定为类型?

使用Gradle,是否可以直接调用GradleBuild而不是将其指定为类型?,gradle,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

我的身材里有这个。格雷德尔:

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')
}

像这样的东西可能有用。。。注:未对其进行测试。但你为什么认为它如此冗长?我认为那样很干净

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();
}

您不能直接调用任务,但是还有很多其他方法可以对代码进行抽象。例如:

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
任务,但这是一个不同的讨论。

def List buildFileList=['common/build.gradle','crawler/build.gradle','portlet/build.gradle']
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()
    }
}

task cleanAll我有三个独立的项目,它们彼此都不了解,我只是想创建一个构建文件,可以一次性构建它们。我想知道您是否可以研究多项目构建。虽然这可能可以回答这个问题,但最好提供一些关于此代码如何帮助的解释。
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()
    }
}