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

新手上路,请多包涵

我有一个复杂的 Gradle 脚本,它围绕构建大量 NetBeans 项目并将其部署到大量环境的功能进行了加载。

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

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

谁能告诉我如何以类似于 Ant 任务的方式将一个 Gradle 文件导入另一个文件?到目前为止,我已经搜索了 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 构建文件的子项目组成。

原文由 Anthony Roy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 642
2 个回答

问题的答案原来是在插件系统中,您可以在插件系统中添加所需的功能,这些插件可以是位于目录 buildSrc/src/main/groovy 中的 groovy 文件。插件也可以打包成一个 Jar,虽然我还没有尝试过。

此处的详细信息: 自定义插件

原文由 Anthony Roy 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题