如何将一个 Gradle 脚本导入到另一个脚本中?

2022-08-31 09:39:12

我有一个复杂的 Gradle 脚本,它围绕构建许多 NetBeans 项目并将其部署到许多环境来包装大量功能。

该脚本运行良好,但实质上它都是通过包含项目和环境信息的六个地图配置的。

我想将任务抽象到另一个文件中,以便我可以简单地在一个简单的构建文件中定义我的映射,然后从另一个文件导入任务。通过这种方式,我可以对许多项目使用相同的核心任务,并使用一组简单的地图配置这些项目。

谁能告诉我如何将一个Gradle文件导入另一个,就像Ant的任务一样?到目前为止,我已经拖网了Gradle的文档,但无济于事。

附加信息

在汤姆在下面的回应之后,我想我会试着澄清一下我的意思。

基本上,我有一个 Gradle 脚本,它运行许多子项目。但是,这些子项目都是 NetBeans 项目,并且附带了自己的 ant 构建脚本,因此我在 Gradle 中有任务来调用其中每个子项目。

我的问题是我在文件顶部有一些配置,例如:

projects = [
    [name:"MySubproject1", shortname: "sub1", env:"mainEnv", cvs_module="mod1"],
    [name:"MySubproject2", shortname: "sub2", env:"altEnv", cvs_module="mod2"]
]

然后,我生成任务,例如:

projects.each({
    task "checkout_$it.shortname" << {
         // Code to for example check module out from cvs using config from 'it'.
    }
})

我有很多这样的任务生成片段,它们都是通用的 - 它们完全取决于项目列表中的配置。

因此,我想要的是一种将其放在单独脚本中并按以下方式导入的方法:

projects = [
    [name:"MySubproject1", shortname: "sub1", env:"mainEnv", cvs_module="mod1"],
    [name:"MySubproject2", shortname: "sub2", env:"altEnv", cvs_module="mod2"]
]

import("tasks.gradle") // This will import and run the script so that all tasks are generated for the projects given above.

因此,在此示例中,tasks.gradle 将包含所有通用任务生成代码,并将针对主 build.gradle 文件中定义的项目运行。通过这种方式,tasks.gradle 是一个文件,可供所有大型项目使用,这些项目由许多具有 NetBeans ant 构建文件的子项目组成。


答案 1

0.9 中有一个新功能。您可以使用命令。apply from: 'other.gradle'

阅读我关于同样的事情的问题:有没有办法拆分/分解Gradle构建的常见部分


答案 2

事实证明,问题的答案是在插件系统中,您可以在其中将所需的功能添加到一组插件中,这些插件可以是位于目录中的时髦文件 。插件也可以捆绑为Jar,尽管我还没有尝试过。buildSrc/src/main/groovy

详细信息在这里: 自定义插件


推荐