【问题标题】:Gradle batch task that invokes subproject and other tasks in order依次调用子项目和其他任务的 Gradle 批处理任务
【发布时间】:2013-01-14 06:49:24
【问题描述】:

我正在为多模块项目编写 gradle 1.4 构建文件。所以有根 build.gradle 定义如下:

subprojects {
    apply plugin: 'java'
    ...

为所有子模块定义了build任务。子模块包含在 settings.gradle 中,每个模块都有自己的构建文件和定义的依赖关系。

到目前为止,一切都按书本:) 现在,在主构建文件中,我添加了一些额外的项目范围任务,例如:aggregateJavadoc(将所有 javadoc 收集到一个中)或bundleJar(从所有类创建 bundle jar)等。手动调用时,每个 on 都可以工作。

现在我需要一个发布任务

  • 构建所有子模块(从命令行调用 - 意思是,我不想为每个子模块手动编写 execute())

  • 调用其他任务(我假设使用 execute())。

我尝试了 dependsOn,但未遵循列出的任务顺序。此外,依赖模块似乎在发布任务执行后执行。我尝试了其他几个想法,但都失败了。

问题:创建这样的 批处理任务 的最佳方法是什么,它必须在所有子模块上调用某些东西并另外执行一些任务?什么是最好的对 gradle 友好的解决方案?谢谢!

【问题讨论】:

    标签: gradle


    【解决方案1】:

    碰巧这可以通过简单的依赖管理来解决。

    所以,我们有很多模块。现在,让我们根据正在构建的模块创建额外的任务:

    task aggregateJavadoc(type: Javadoc) {
        dependsOn subprojects.build
    
    task bundleJar(type: Jar) {
        dependsOn subprojects.build
    

    最后,我们的release 任务将如下所示:

    task release() {
        dependsOn subprojects.build
        dependsOn aggregateJavadoc
        dependsOn bundleJar
        ...
    }
    

    这将首先构建子项目;不是因为它被列在最前面,而是因为附加任务取决于构建。附加任务的顺序并不重要。这对我来说最有意义。

    编辑 如果您的子项目之一(即模块)是非 java 模块,那么您将在构建此项目时遇到问题。我所做的是对子模块进行分组,如下所示:

    def javaModules() {
        subprojects.findAll {it.name.contains('jodd-')}
    }
    

    然后改为引用subprojects,在任何地方使用javaModules!例如:

    configure(javaModules()) {
        apply plugin: 'java'
        ...
    

    task prj {
        dependsOn javaModules().build
    }
    

    顺便说一句,我在所有依赖于构建的其他项目上使用这个“虚拟”任务 prjdependsOn,以防止重复。

    【讨论】:

    • 我创建了一个名为“dependsOn subprojects.build”的“发布”任务。除了我拥有的非 java 项目的子项目外,这非常有效。然而,我为该项目创建了一个名为 build 的任务,但它抱怨说:“在项目 ':native' 上找不到属性 'build'。”想法?
    • 是的,我遇到了同样的事情,因为我有一个非 Java 模块。请阅读我对答案的编辑以获取想法。
    • 我已经按类型组织了子项目,但是,我想在项目上调用相同的任务定义。无论出于何种原因,该任务都不能作为项目的属性使用,根据文档,它应该是。
    • 我猜是因为该任务是在我的子项目中定义的(靠近底部),而“发布”任务是根任务(在我的文件顶部附近定义)它没有找到它。当我将发布任务移到我的项目定义下方时,它可以工作。
    猜你喜欢
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    相关资源
    最近更新 更多