当前位置: 首页 > 知识库问答 >
问题:

按顺序调用子项目和其他任务的Gradle批处理任务

施振海
2023-03-14

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

subprojects {
    apply plugin: 'java'
    ...

它定义了所有子模块的生成任务。子模块包含在设置中。gradle和每个模块都有其具有已定义依赖项的构建文件。

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

现在我需要一个任务发布,它将

>

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

    调用额外的任务(我假设使用执行())。

    我尝试依赖,但列出的任务的顺序不遵循。此外,依赖模块似乎是在发布任务执行后html" target="_blank">执行的。我尝试了其他几个想法,都失败了。

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

  • 共有1个答案

    朱通
    2023-03-14

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

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

    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-')}
    }
    

    然后改为引用子项目,到处使用javaModules!例如:

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

    task prj {
        dependsOn javaModules().build
    }
    

    顺便说一句,我使用这个'虚拟'任务prj依赖于所有那些依赖于构建的附加项目,以防止重复。

     类似资料:
    • 我正在做一个需要调用其他任务的任务。 我尝试通过添加build.dependson clean来修复原始目标,但这似乎没有影响。 感谢任何帮助。

    • 我想在父build.gradle文件中创建一个任务,该任务按这个特定顺序从子项目调用任务。这是我在build.gradle文件中的任务定义,每个子项目的任务都已定义并开始工作。我可以从命令行调用每个单独的任务。我希望能够从命令行调用这个父任务,并且它按照定义的顺序执行所有子项目任务。 无法获取org.gradle.api.project类型的项目“:LoadRemote”的未知属性“Remote

    • 我面临以下问题。我有一个多模块的Gradle项目。一个模块是我的根项目,第二个模块是集成测试。 为了让我的集成测试运行,复制任务需要首先运行,以便将一些资产移动到项目根目录上的文件夹中。 我已经在我的根项目上定义了这样一个任务,当我试图调用它时,它什么也不做(我尝试了几种不同的调用方式)。 由于失败,我继续在子项目本身上创建了以下任务: 这是我的另一个任务。我的目标是让它将根项目类以及在下生成的j

    • 如果我有一个像这样的gradle多项目 每个项目都有一个任务'foo',我可以在root项目上调用它 它还可以为子项目执行 但如果我从子项目调用task“:foo” 仅执行根项目上的任务 但不是子项目上的“foo”任务。 在子项目中,是否有方法对所有项目调用“foo”?我这样问是因为我使用的是gradle eclipse插件,在那里我只能访问子项目,即我在eclipse中看到的项目。 顺便说一句:

    • A task is special because knowing when a task is about to exit is useful in these circumstances: Frameworks know when to render the UI. Measuring enter/leave allows knowing total script/task time. Exi

    • 我有一个这样的多项目构建 现在,在项目中,我已经为所有子项目声明了一个任务,如下所示: 当我运行时,我得到的输出类似于以下内容(其他内容): 现在,我尝试像这样为简单项目运行该任务 我得到的输出是: 失败:构建失败,但有一个异常。 > 哪里出错了:在项目中找不到任务你好:例子:简单项目。一些候选人是:帮助。 尝试:运行gradle任务以获取可用任务的列表。使用--stack跟踪选项来获取堆栈跟踪。