【问题标题】:Maven dependency resolving in multi module project多模块项目中的Maven依赖解决
【发布时间】:2017-05-27 05:54:44
【问题描述】:

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

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

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

或者对于 'mvn clean compile' 使用目标目录,但对于 'mvn clean install' 本地存储库。

谁能解释一下依赖解析在“多模块”项目中是如何工作的。

谢谢解答.....

【问题讨论】:

    标签: maven maven-3


    【解决方案1】:

    我想你看看https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html会更好理解

    在构建jar的过程中有一个生命周期。编译目标将编译代码并在您的目标目录中创建一个完整的类文件夹。此目标将解析您的 pom 中的所有依赖项,并将任何依赖项下载到您的本地 repo,而不是那里。

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

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

    【讨论】:

    • 我问的和生命周期无关......我只想知道Maven如何解决多模块项目中的模块间依赖关系。
    【解决方案2】:

    Maven 由独立的组件组成。

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-15
      • 1970-01-01
      • 2019-11-17
      • 2020-09-05
      • 1970-01-01
      • 2012-08-13
      • 1970-01-01
      • 2010-12-16
      相关资源
      最近更新 更多