gpt4 book ai didi

依次调用子项目和其他任务的 Gradle 批处理任务

转载 作者:行者123 更新时间:2023-12-04 04:23:44 24 4
gpt4 key购买 nike

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

subprojects {
apply plugin: 'java'
...

它定义了 构建 所有子模块的任务。子模块包含在 中settings.gradle 并且每个模块都有其定义的依赖关系的构建文件。

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

现在我需要一个任务 发布那将
  • 构建所有子模块(从命令行调用 - 意思是,我不想为每个子模块手动编写 execute())
  • 调用其他任务(我假设使用 execute() )。

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

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

    最佳答案

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

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

    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
    }

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

    关于依次调用子项目和其他任务的 Gradle 批处理任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14604266/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com