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

时间:2017-01-12 07:59:12

标签: maven maven-3

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

通常我只使用' mvn clean install'当我构建我的多模块项目时,我的假设是,如果项目中的任何模块需要先前的模块,那么依赖性将通过转到本地存储库并加载相应的' jar来解决。

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

或者&#m; mvn clean compile'使用的目标目录,但用于< mvn clean install'本地存储库。

任何人都可以向我解释依赖解析如何在“多模块”中工作吗?项目

答案答案.....

2 个答案:

答案 0 :(得分:0)

如果你看一下https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

,我想你会更好理解

在制作罐子的过程中有一个生命周期。编译目标将编译代码并在目标目录中创建一个完整的类文件夹。此目标将解析您的poms中的所有依赖项,并将所有依赖项下载到您的本地存储库,而不是已存在。

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

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

答案 1 :(得分:0)

Maven由单独的组件组成。

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

然后有一个组件,当你要求它构建几个maven模块时,例如在项目的根目录调用mvn确实命令各个模块使用依赖项来找到构建的最佳顺序,这样如果给定的模块依赖于另一个,它将在它依赖的模块之后构建。然后它调用我描述的前一个组件,按顺序构建每个模块。

在所有情况下,始终从本地仓库获取给定的模块依赖关系。期望之前构建的先前模块实际上通常使用mvn安装将其工件推送到本地存储库,但是由于正确配置,您可以强制它在任何步骤执行它(可能不是一个好主意)。

在所有情况下,如果没有构建前一个组件jar并将其放入repo中,则无法在类路径中添加此类jar以便编译下一个模块。

仅在多个项目中进行编译不会有任何用处。