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

如何解决多模块项目中模块之间的依赖关系?

劳亦
2023-03-14

在使用Maven一段时间后,我对Maven在构建体系结构中带来的许多特性感到兴奋,尤其是依赖项管理。然而,我一次又一次地遇到了一个问题--Maven如何解决多模块项目之间的依赖关系。我想知道这是否是当前Maven实现的大缺陷和/或是否有任何令人满意的解决方案。

假设我有一个多模块的Maven项目。父pom包含三个模块--moduleA(jar)、moduleB(jar)和moduleC(war)。B依赖于A而C依赖于B很简单吗?现在,我想在父项目上运行MVN依赖项:Go-offline,它应该解析所有依赖项并将它们带到本地。m2目录中。它失败了,因为Maven抱怨它在处理ModuleB时不能解决moduleA的依赖关系。因为所有这些模块都属于一个groupId,所以我甚至尝试使用-dexcludeGroupIDS=x.y.z来排除这些模块依赖项,但仍然失败。

共有1个答案

高峻
2023-03-14

Maven有一个“反应器”的概念,在这个反应器中,在一次运行中构建的构件(例如Maven包)可以在构建过程中进行依赖解析。例如,如果依赖关系图产生构建顺序moduleA moduleB moduleC,并且您执行MVN package,Maven将构建moduleA,打包其工件并将其添加到反应器中,然后构建moduleB,打包它并将其添加到反应器中,然后对于moduleC也是如此。这意味着moduleB可以访问moduleA的工件以进行依赖解析,moduleC可以访问moduleA和moduleB。这只有在实际构建工件时才起作用,即当您运行包目标时。

问题是,当您因为对工件不感兴趣而不运行包目标时(至于您的依赖项:脱机示例),已经处理的模块的工件不会构建,因此不会添加到反应器中。我也觉得这很烦人;我认为Maven应该在其要构建的模块列表中查看POM文件,并在那里查看;但事实并非如此。

简而言之,解决问题的方法是html" target="_blank">执行MVN包依赖项:Go-offline。这不会在本地存储库中安装工件(我认为这是非常糟糕的做法),但它会在构建期间将它们放在反应器中,这意味着Maven将能够解决从moduleB到已经构建的moduleA之间的依赖关系。缺点是,每个模块都将被测试和打包,当您只想执行依赖项:go-offline时,这是一个很大的工作量。

不管怎样,希望这能有所帮助。

 类似资料:
  • 当运行命令(如 或 Maven无法解决我的一个模块对另一个模块的依赖关系。 [错误]无法在项目分析器上执行目标-app:无法解析项目的依赖项project_group:a:jar:0.1-snapshot:找不到项目project_group:b:jar:0.1-snapshot 项目结构如下:

  • 我有一个关于Maven依赖解析机制如何在多模块项目中工作的问题。 通常,我只在构建多模块项目时使用“mvn clean install”,我的假设是,如果项目中的任何模块需要以前的模块,依赖关系将通过访问本地存储库并加载相应的“jar”来解决。 由于项目内部原因,我必须使用“mvn清洁编译”,这个命令自然不会创建任何“jar”,而“install”不存在。所以在这里我开始想知道,多模块项目的依赖项

  • 我的项目是个springboot多模块项目,其中2个模块A,B, A的pom文件引用了B,B pom里也引用了A,现在启动报错。怎么能配置pom文件正常启动? 现在是把依赖的代码去掉了,在自己模块在写一遍,但是代码就重复了。希望通过配置文件消除这个问题。

  • 我有一个用@RequiresDependencyResolution测试注释的mojo。 通过对github上的surefire代码的简单扫描,它看起来也使用RequiresDependencyResolution=Test,但是能够在这个项目上运行而没有问题。 https://github.com/apache/maven-surefire/blob/master/maven-surefire-

  • 我有一个多模块Maven项目,其中包含子模块ModuleA和ModuleB等。ModuleA将ModuleB列为依赖项。但是,当仅构建模块A时,Maven不会解决模块B的依赖关系-导致。我想避免构建整个父级以使构建更快。目前我发现让它工作的唯一方法是使用exec插件和脚本,将父项目称为“ModuleB, ModuleA”,这意味着我必须在每次依赖项更改时更改脚本(例如添加ModuleC)。 是否有

  • 我正在使用STS 2.9.1(构建在Eclipse 3.7.2上)和与STS(V1.0.200.20111228-1245)绑定的m2e插件。 我有一个问题是包含多个模块的Eclipse项目中缺少依赖项,或者我不完全理解它应该如何工作。 这是一个maven项目。 在我的项目>Properties>Java Build Path>Libraries中,我有“maven dependencies”库,