【问题标题】:How to run gradle script from gradle如何从 gradle 运行 gradle 脚本
【发布时间】:2014-10-20 17:12:35
【问题描述】:

如何从 gradle 运行另一个 gradle 脚本。我有多个 gradle 脚本在 <root_project>/test 目录下运行测试。使用要运行的测试 gradle 文件的名称调用 <root_project>/build.gradle。例如

gradle run_test -PtestFile=foobar

这应该运行<root_project>/test/foobar.gradle(它的默认任务)

我目前正在做的是在run_test 任务中调用project.exec。这可行,但现在我需要将项目属性从运行 run_test 的 gradle 进程传递给运行 foobar.gradle 的项目属性

我该怎么做?有没有更集成的方式来运行另一个 gradle 脚本,将所有必需的信息传递给子 gradle 脚本?

【问题讨论】:

    标签: gradle


    【解决方案1】:

    我做了类似的事情,其中​​一个 gradle 中的“构造”任务移交给它创建的目录中的另一个 gradle 文件中的“执行”任务(称为人工制品),并且它也通过所有项目属性.

    这里是切换的相关代码:

    def gradleTask = "yourTaskToEventuallyRun"
    def artefactBuild = project.tasks.create([name: "artefactBuild_$gradleTask", type: GradleBuild])
    artefactBuild.buildFile = project.file("${artefactDir}/build.gradle")
    artefactBuild.tasks = [gradleTask]
    
    // inject all parameters passed to this build through to artefact build
    def artefactProjectProperties = artefactBuild.startParameter.projectProperties
    def currentProjectProperties = project.gradle.startParameter.projectProperties
    artefactProjectProperties << currentProjectProperties
    // you can add more here
    // artefactProjectProperties << [someKey: someValue]
    
    artefactBuild.execute()
    

    【讨论】:

    • @SundeepGupta 很高兴我能提供帮助。
    • 当我尝试该代码时,在我的另一个 gradle 文件中有一个名为 setup 的任务,我得到 Execution failed for task ':demo'. &gt; Could not find method execute() for arguments [] on task ':artefactBuild_setup' of type org.gradle.api.tasks.GradleBuild. 并且我无法弄清楚为什么这段代码对你有用但不是对我来说,除非是因为 Gradle 的不同版本。我用 5.2.1 和 5.3.1 尝试过这段代码,但失败了。
    • This answer 帮助我实现了我想做的事情。
    【解决方案2】:

    如果要指定另一个gradle脚本,可以使用:

    gradle --build-file anotherBuild.gradle taskName
    

    gradle -b anotherBuild.gradle taskName
    

    【讨论】:

      猜你喜欢
      • 2013-06-25
      • 1970-01-01
      • 2011-01-22
      • 1970-01-01
      • 1970-01-01
      • 2016-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多