没有多模块的 Maven 中是否存在"build with local dependencies"?



我有一组应用程序,它们都使用Maven和本地存储库。应用程序在其pom.xml中使用<dependency>形成依赖树。所有这些项目的版本都有-SNAPSHOT

Maven(或一些兼容的依赖项管理器)是否有可能构建一个应用程序,并将其所有的本地依赖项的源更改?

我不想创建一个多模块项目,因为:

  • 项目实际上是库,而不是模块;
  • 我不希望有一个额外的复杂性,只是有一个形式的构建已经精确定义;
  • 我希望这个过程是动态的:如果一个库足够成熟,可以放入远程存储库,它将不再与主项目一起重建,这是ok的。

目前,有很多重构,将代码从一个库移动到另一个库等,并且经常需要重新构建依赖树的实质性部分。因此,我需要在几个项目中手动编写mvn install,以确保没有过时的代码。

不行。即使是一个多模块的项目,maven也不会检测哪些模块改变了源代码,哪些没有。

在Maven 2中有一个(不稳定的)实现,但在Maven 3中没有继续。请参阅如何让maven 3.0只构建具有本地scm更改的模块

我希望他们会在maven 4中再次包含它,但我还没有看到它:https://maarten.mulders.it/2020/11/whats-new-in-maven-4/

我曾经做过一个类似的设置,但是必须使用shell脚本和一些git魔法才能使它工作。

你也可以决定从一开始就把你的库放在单独的repo中,并使用谷歌用于android开发的repo工具:https://github.com/GerritCodeReview/git-repo/blob/main/README.md

一旦在特定的Maven项目上运行mvn install,在依赖项收集期间(在编译阶段之前),位于同一工作站的所有其他Maven项目都可以访问它。

Maven Build Lifecycle官方描述:

install-将包安装到本地存储库中,以便在本地其他项目中作为依赖项使用

没有必要将库作为同一个项目的一部分(或者将其作为一个多模块项目)。但是一旦你想要与你的队友共享这些库,你就需要强迫他们在本地安装库(就像你所做的那样),或者将这些库存储在一些外部的repo中,比如ArtifactoryNexus

最新更新