问题标签 [gradle-multi-project-build]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
8178 浏览

gradle - 使用空项目构建 Gradle 多项目

在我们的项目中应用多项目 Gradle 结构时,我的settings.gradle如下所示:

毕业项目给我

这正是目录结构!
在我的根目录中,我有一个build.gradle,它将 java 插件应用于所有子项目:

在构建时,我最终得到了:source:compA的工件,它们是空的,因为这实际上不是一个项目,只是子目录apicore是正确的 Java 项目。

避免空工件的最佳方法是什么?

0 投票
2 回答
31517 浏览

gradle - Gradle 子项目名称与文件夹名称不同

我有几个子项目是多项目构建(平面层次结构)的一部分。我想将它们的名称设置为与其文件夹名称不同。但是,在 include (settings.gradle) 中,它必须具有文件夹名称,否则将找不到它(对于compile project(':ProjectName').

如果我尝试设置project.name它告诉我这是只读的。原因是我们正在从 Ant 转换并希望为 Eclipse IDE 保留相同的名称。就工件而言,我们jar.artifactName用来设置我们想要的任何名称。

谢谢你。

0 投票
1 回答
628 浏览

gradle - 如何在另一个子项目的 gradle 任务中调用一个子项目的代码?

我有一个包含两个子项目的项目。

其中一个子项目“A”包含发布到工件的代码。

另一个子项目“B”的任务需要完全按照 A 的代码中的一个方法执行。我可以在 groovy 中复制逻辑,但是有什么方法可以让我在子项目 B 中的任务调用作为子项目 A 的一部分编译的代码?

我尝试在 B 中添加一个 buildscript 块,将 A 中的工件添加到类路径中:

...但这给了我一个错误:

不能在脚本类路径定义中使用项目依赖项。

我不相信我可以将 subproject-a 移动到buildSrc,因为我还将其工件发布到 maven 存储库以供其他项目使用。

0 投票
1 回答
199 浏览

gradle - gradle 多项目构建覆盖子项中的依赖项

在 gradle 多项目构建中:

有没有办法实现这种行为?

0 投票
4 回答
1786 浏览

spring-boot - 如何忽略多项目 Kotlin Spring Boot 应用程序的根项目的 gradle 构建?

背景:

我目前有一个多模块(多项目)应用程序存储库。“根”不是可运行的应用程序。它只是我有一个根build.gradle.kts文件的源目录,其中包含我所有子项目之间通用的依赖项和插件。我的每个子项目都有自己的build.gradle.kts.

所以我的整体项目结构看起来像这样:

问题:

每次我运行时gradle build,我都会收到一条错误消息:

然而,当我运行我的任何一个子项目(例如build :my_nested_project_a:build)时,它构建得很好。

当前 Gradle 构建文件

这是我目前在“根”中的内容gradle.build.kts

注意:我apply false在我的插件上使用,因为我认为它会阻止 gradle 在使用gradle build.

我正在尝试做的事情:

我有一个 CI 管道,我想简单地运行gradle build它应该build为所有子项目运行任务。但是,在那个过程中,我想忽略为“根”项目运行构建或绕过它,因为它不是一个可运行的应用程序,而只是构建子项目。

任何帮助将不胜感激!:)

0 投票
0 回答
33 浏览

gradle - 找不到 Gradle 子模块

我有以下 gradle 项目结构:

的 A-Project 中的 build.gradle包含以下内容:

我的“Super”-settings.gradle文件包含类似的内容:

在我的子项目“A”中,settings.gradle 看起来像这样:

当从 SUPER 文件夹在命令行上像“ ./gradlew SUPER:A1:sometask”那样调用 gradlewrapper 时,它会失败并显示以下消息:

./gradlew A1:sometask但是,当从 A-sub-project-folder 中执行类似“ ”的操作时,它可以成功运行。

你能解释一下我在这里做错了什么吗?

0 投票
1 回答
1032 浏览

spring - 如何使用相互依赖的 Spring Boot 项目和 jars 创建多构建 gradle 项目

背景

我使用 gradle 编写了一个 spring boot 项目,它工作正常。我想将项目拆分为库(jar),以便我可以重用它们。

这些是要求

  1. 每个项目都在同级文件夹中,每个文件夹都包含自己的 .git 存储库。
  2. 多构建项目应位于同级文件夹中,而不是包含子项目的文件夹中。它还包含自己的 .git 存储库。
  3. 仅用作库 (jar) 的项目具有带有注释的测试@SpringBootTest,这些测试应该可以独立运行。
  4. 用作类库的项目应该作为“瘦 jars”提供给其他项目,而不包括任何依赖项。使用项目需要添加它使用的所有项目累积的任何依赖项。
  5. 应该可以独立构建每个子项目。对于依赖套件中其他项目的项目,这意味着构建项目将使用它需要的其他项目(jar)的输出,如果该输出尚未准备好,gradle 将首先构建这些项目。
  6. 应该可以从多项目父级构建所有项目(将解决依赖关系,并且只会进行必要的构建)。
  7. 使用多项目构建整个套件将创建一个包含父引导 jar 及其所有依赖项的可部署文件夹。
  8. 我希望能够使用 Intellij 创作项目、编辑和调试上述所有内容。

最小的、可重现的例子

我在这里上传了一个最小的、可重现的示例(reprex):https
://github.com/david-sackstein/multiproject 它包含三个文件夹:

  1. productcommon是一个带有公共类的罐子ProductFactory
  2. productservice 是一个 SpringBoot 应用程序,@RestController它在其中一个方法中调用 ProductFactory 的公共方法。productservice 对 productcommon 有项目依赖。
  3. multiproject是一个 gradle 项目,没有依赖于productcommon和的代码productservice
  4. 我相应地在所有三个项目中设置了 build.gradle 和 settings.gradle。

当我构建productservice它失败 - 显然是因为项目导入productcommon失败。

此示例中缺少什么或不正确?

0 投票
1 回答
414 浏览

gradle - 如何在多平台多项目 Kotlin 构建中向另一个项目的测试添加依赖项

我有一个多平台的 Kotlin 项目,其中包含多个模块(子项目)。Kotlin的Building Multiplatform Projects with Gradle文档清楚地展示了如何设置模块之间的项目依赖关系:

我现在面临的问题是,虽然本文记录了如何将一个模块(其所有目标平台)的依赖项添加到另一个模块(其相应的目标平台),但它并没有说明如何将依赖项添加到另一个模块

我希望这是一个相当常见的用例。例如,我想这样做的原因之一是我的模块 A 的测试源包含存根类。模块 B 依赖于模块 A,包括在模块 A 的测试源中为其提供测试存根的类定义。因此,模块 B 的测试可能希望重用模块的测试源中定义的那些测试存根也就不足为奇了一个。

多项目构建中的一个常见建议是将此类测试源移动到另一个模块,但这对我来说似乎没有必要。在我看来,对于普通的多项目构建存在更清洁的解决方案,但我无法弄清楚如何在多平台多项目 Kotlin 构建中配置等效的解决方案,该构建也依赖于 Kotlin Gradle DSL 中演示的上面的代码。

0 投票
1 回答
40 浏览

java - 为什么 Gradle 5 (5.6.3) 在组件解析期间做出了意外的决定?

我有一个非常大的多项目 java 构建。在更新到 Gradle 5(4.10.3->5.6.3) 之后,最可怕的事情之一就是依赖解析期间的意外失败:

对我来说,这一天很清楚,它应该是一个项目依赖。但我收到:

因此,gradle 试图将其解决为ExternalModuleDependency [就 gradle 而言] 而不是DefaultProjectDependency并且构建按预期失败

有人解决这个问题吗?

评论:

  1. 请不要提出复合构建(目前不可能,但我正在努力)
  2. 更改构建系统(我们有一个非常大的项目):)
0 投票
1 回答
167 浏览

gradle - 如何仅构建 gradle 父模块的子模块?

我拼命地尝试只构建 gradle 模块的子模块。这是我目前的结构:

当我跑

它构建子模块。我希望它构建所有两个子模块eggnogg

我试过了:

但它只构建 foo (没有来源)

是我期望做的还是

然而,让它工作没有运气。有任何想法吗?该文档没有给出多项目部分的提示。