【发布时间】:2011-01-16 22:35:51
【问题描述】:
我有一个复杂的 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'.
}
})
我有很多这样的任务生成 sn-ps,它们都是通用的——它们完全依赖于项目列表中的配置。
所以我想要的是一种将其放在单独的脚本中并以以下方式导入的方法:
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 构建文件的子项目组成。
【问题讨论】:
-
考虑“应用自:'other.gradle'”结构来导入外部声明。 (参见“12.4. 使用外部构建脚本配置项目”gradle.org/0.9-preview-1/docs/userguide/…)
-
@PetrGladkikh
apply from立即执行外部任务。这在执行逻辑中可能不太可取(即,我想在我想要的时候执行任务,而不是立即执行)。 -
上面评论中的这句话不正确:
apply from立即执行外部任务。不要被误导。外部任务已配置,未执行。
标签: java ant groovy build gradle