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

多模块(多scm)分级项目开发

鲁城
2023-03-14

我继承了一个具有以下设置的项目。Gradle中大约有5个单独的模块,分别位于5个不同的git存储库中。这些模块的版本控制是由ScmVersion插件驱动的。其中一个模块是一个将这些模块集成在一起的应用程序。

模块之间的依赖关系在build.gradle dependency部分中由groupId、artificatId和version指定。

App (separete git repo)
- depends on libA
- depends on libB
- depends on libC

LibA (separete git repo)

LibB (separete git repo)
- depends on LibD

LibC (separete git repo)
- depends on LibD

LibD (separete git repo)

我对Gradle很陌生。到目前为止,我已经创建了一个简单的脚本,它将每个lib的scmVersion覆盖到一个带有时间戳的快照,并运行“clean build publishtomavenlocal”。在App、LibB和LibC的gradle.properites中,脚本将依赖版本覆盖到那些刚刚构建的快照,并运行相同的任务(在脚本结束时,这将返回到发布版本)。这有效地构建了项目的整个结构,就像它在我的机器上一样。

我的问题是,我如何在当地有效地发展这个?我在用Intellij。我已经看到了一些使用嵌套模块的多项目设置的示例,但是如何在当前配置项设置中也保持它的工作,在当前配置项设置中,作业将这些配置项之间的依赖关系视为常规的group-artifactId-version依赖关系?

非常感谢您提供的任何信息。

p.s在离开之前,同事提到Eclipse Gradle插件可以以某种方式处理这个问题。请问你有这方面的经验吗?

共有1个答案

子车灿
2023-03-14

我们可能会使用Gradle composite build特性(在版本2016.3中也集成到Intellij中)来解决这个问题。不幸的是,Gradle不支持嵌套复合构建:(

 类似资料:
  • 在根中应用Quarkus插件的多模块gradle项目在步骤失败,出现: 根如下所示: 但是,将行移动到子项目的中,生成将成功。看来quarkus构建步骤是在插件声明的地方运行的,而不是在插件实际应用的地方。 理想情况下,我希望在根项目中声明一次插件,然后仅将其应用于子项目,而不是在根项目中执行它,在根项目中显然没有什么可构建的。 有什么想法吗?

  • 问题内容: 我有学习的背景和思想。 我喜欢使用的其中一项功能是可以将项目制作为多Maven模块。例? 令人高兴的是,每个模块都可以具有自己的依赖性,并且可以独立测试它们,而不用运行一个整体应用程序。 我们如何实现类似的东西,或者它的生态系统? 问题答案: 你绝对可以做到的。这被称为SBT Multi-Project build。您可以使用以下内容定义一个主项目和多个子项目(来自上面的docs链接)

  • 我曾广泛使用过Maven 目前有5个不同的maven项目,每个项目都有一个不同的pom.xml。到目前为止,它们之间存在依赖关系,如果需要,每一个都指向 中的另一个。 现在我们不喜欢的是 当我们发布子projectA时,我们需要手动修改所有将projectA作为依赖项的项目以使用新版本。Saw Maven有一个版本插件,不知道这会有什么帮助。 作为解决方案,我希望在POM之间有一个更干净的组织,并

  • 在使用Gradle插件和的多模块项目中,正确的Gradle配置是什么样子的? 我有以下项目设置: 模块包含公共项目配置。 模块是一个我希望使用spring-boot-dependencies bom中指定的版本号导入依赖项的模块,但结果是一个标准JAR。 模块是一个依赖于的模块,其结果是一个可执行的spring boot jar文件(包括所有依赖项)。因此,该项目既需要也需要插件。 为了保持Gra

  • 我是新来的,并尝试在Maven多模块项目中使用它。我的项目结构如下: 应用程序模块执行具有构建目标的quarkus maven插件。包含一个简单的rest控制器,因此也包含一个在中。RESTAPI模块由应用程序模块引用。 如果我使用打包整个项目,那么生成的runner jar将按预期工作。但是,如果我尝试使用在开发模式下启动项目,我会遇到以下异常: 错误]无法执行目标io。quarkus:quar

  • 我最近开始学习java处理器,并尝试将它们与gradle一起使用,当我构建项目时,我可以看到注释处理器JAR(其他模块)被打印出来(我在app gradle文件中添加了这一点,您可以在下面看到),但没有执行。我不知道我做错了什么...