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

Gradle:使用子项目的递归执行调用根任务

苏华荣
2023-03-14

如果我有一个像这样的gradle多项目

RootProject
+-- SubProjectA
+-- SubProjectB

每个项目都有一个任务'foo',我可以在root项目上调用它

RootProject>gradle foo

它还可以为子项目执行

:foo
:SubProjectA:foo
:SubProjectB:foo

但如果我从子项目调用task“:foo”

RootProject\SubProjectA>gradle :foo

仅执行根项目上的任务

:foo

但不是子项目上的“foo”任务。

在子项目中,是否有方法对所有项目调用“foo”?我这样问是因为我使用的是gradle eclipse插件,在那里我只能访问子项目,即我在eclipse中看到的项目。

顺便说一句:到目前为止,我想出的(有点黑客)解决方案

task fooAll(type:Exec) {
    workingDir '..'
    commandLine 'cmd', '/c', 'gradle foo'
}

共有1个答案

柯曦
2023-03-14

将任务名称(例如foo)解析为任务是开始目录的功能,默认为当前目录。您可以使用-p命令行选项更改开始目录(请参阅gradle--help)。所以您必须执行类似gradle foo-p.../的操作。

此外,导入根项目可能是解决Eclipse问题的更好方法。Eclipse工具可以很好地处理层次目录布局。

备注:foo是一个任务路径。它引用根项目中名为foo的任务()。

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

  • 我正在使用以下项目结构Project ---子项目1 ---子项目2 ---子项目3 |build.gradle |设置。格拉德尔 子项目2取决于子项目1 子项目3取决于子项目2 对于所有子项目,我需要有任务“构建”,这将是每个项目的自定义任务。但在“构建”之前必须执行一些初始化任务(对于所有子项目都相同)。问题是,这个初始化任务必须在构建期间执行一次,而且只能执行一次,无论我在构建什么-根项目或

  • 我有一个多项目的Gradle构建,我定制了“运行”任务,以便在根项目中做一些不同的事情。然而,我不希望它像现在这样在完成后调用每个子项目的“运行”任务。但是这种行为应该只针对这个任务,我希望其他每个任务都按照默认值递归执行,但run任务不是。我也不能为每个子项目全局禁用run任务,因为它在单独执行时在每个子项目中都有一个目的。

  • 我知道我能做到 但这也会得到projA和projB,我只想在c,d,E上运行任务...请让我知道实现这一点的最佳方法。

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

  • 我已经设置了一个Gradle任务来自动生成Gradle构建中的一个子项目,另一个子项目依赖于该子项目(这样做的原因:涉及Apache Cordova的故事很长!)。因此,根构建。gradle包含此自动生成任务,该任务创建“CordovaLib”子项目。构建。另一个子项目(非自动生成)中的gradle依赖于CordovaLib: 有没有办法在评估未生成的子项目的build.gradle之前执行自动生