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

多模块项目中的Maven依赖解析

谯德元
2023-03-14

我有一个关于Maven依赖解析机制如何在多模块项目中工作的问题。

通常,我只在构建多模块项目时使用“mvn clean install”,我的假设是,如果项目中的任何模块需要以前的模块,依赖关系将通过访问本地存储库并加载相应的“jar”来解决。

由于项目内部原因,我必须使用“mvn清洁编译”,这个命令自然不会创建任何“jar”,而“install”不存在。所以在这里我开始想知道,多模块项目的依赖项解析是如何工作的,虽然jar'没有创建,但项目仍然能够看到以前版本的更改。目标目录是否用于依赖管理?

或用于“mvn clean compile”目标目录,但对于“mvn clean install”本地存储库。

有人能给我解释一下“多模块”项目中的依赖关系解析是如何工作的吗?

谢谢你的回答……

共有2个答案

胥和悌
2023-03-14

Maven由单独的组件组成。

有一个组件处理给定的模块,并尝试获取其依赖项。它总是从本地存储库获取依赖项,最终在下载此类依赖项之后。如果依赖项不存在并且无法卸载,它将失败。最终,模块将创建自己的项目,并将其发布到本地存储库。

然后有一个组合,当你要求它构建几个maven模块时,例如在项目的根目录下调用mvn确实对各种模块使用依赖关系来查找构建的最佳顺序进行排序,以便如果给定模块依赖于另一个模块,它将在它所依赖的模块之后构建。然后,它调用我描述的上一个组件,按顺序构建每个模块。

在所有情况下,给定的模块依赖关系总是取自本地repo。我们的期望是,之前构建的模块实际上将它们的工件推送到本地repo(通常是在mvn安装时),但是由于配置正确,您可以在任何步骤强制这样做(可能不是一个好主意)。

在所有情况下,如果前一个组件jar没有被构建并放入repo中,那么这样的jar就不可能被添加到类路径中,以便编译下一个模块。

只在多个projet上进行编译不会有任何用处。

谭伟
2023-03-14

我想如果你看一下https://maven . Apache . org/guides/introduction/introduction-to-the-life cycle . html你会更明白

在建造罐子的过程中有一个生命周期。编译目标将编译代码,并在目标目录中创建一个完整的classes文件夹。这个目标将解析您的poms中的所有依赖项,并将所有依赖项下载到您的本地repo,而不是已经在那里。

安装目标将从类目录创建 jar 并将其安装在本地存储库中。

我真的认为你需要运行安装目标来获得任何有用的东西。

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

  • 我有一个多模块maven项目,包含三个模块、和 Core具有以下依赖项定义 我已经为所有三个模块添加了Java9定义,的如下所示: 但是,我不知道如何让的测试类能够在测试执行期间看到类。当尝试测试运行时,找不到类。 如果向的添加需要My.Project.TestUtils;的: 然后在编译时,我得到一个错误,即找不到模块(大概是因为它只是作为测试依赖项引入的)。 在Java9模块化的世界中,如何处

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

  • 请找到下面所有的3个POM。

  • 问题内容: 我试图弄清楚Maven多模块项目中的所有依赖项。首先,我使用appfuse创建了一个新的spring mvc多模块项目。它最初具有Web和核心模块。 我发现了部署此项目的知识。但是当我遇到错误时。我总是在哪里添加依赖项或插件感到困惑。我想澄清以下问题。 我创建了一个appfuse mvc多模块项目。我先安装了核心,然后在网上进行了maven jetty7:run(最初我在根文件夹上运行

  • 我有一个多模块maven项目。请在父POM下方找到。 儿童POM如下所示。 我已经在parent中声明了从slf4j进行日志记录,但在eclipse中没有生成相同的maven依赖项,因此我无法在代码中使用日志记录。谁能告诉我这里出了什么问题吗。