【问题标题】:Why add the Maven local repository as a distributionManagement in the POM?为什么要在 POM 中添加 Maven 本地存储库作为 distributionManagement?
【发布时间】:2017-01-17 18:46:22
【问题描述】:

将此存储库条目添加到 pom.xml 是否有意义?

...
<distributionManagement>
    <repository>
        <id>dev</id>
        <name>Local repository</name>
        <url>file://${user.home}/.m2/repository</url>
    </repository>
...

我一直认为无论如何都会默认包含本地仓库。

我知道这不会在 Windows 上构建。我在我公司的pom.xml 中找到了上面的条目。

【问题讨论】:

  • 不,我不这样做。我的本地 .m2 完全可以正常工作,而无需将其作为 显式添加到我的 pom.xml 中。我在 Windows 7 上运行,因此与 Microsoft 操作系统无关。看起来像是某人的错误。
  • 这看起来有人不知道mvn install 做了什么?

标签: maven


【解决方案1】:

这里有几个问题。不,这样做没有意义,但不是因为它默认包含在内——不是——而是因为这样做是非常错误的。

请记住,&lt;distributionManagement&gt; 配置 Maven 将在何处部署和发布您的工件。通过这一点配置,Maven 会将工件发布到您的本地存储库中;这是有问题的:

  • 您的本地存储库应该是已下载和安装的依赖项的缓存,可以随时完全删除和删除;一切都应该仍然有效(Maven 将重新下载依赖项)。事实上,在 CI 系统上进行干净的构建并不奇怪,每个构建都有一个不同的本地存储库,因此每个构建都完全独立于其他构建(并且不依赖于以前下载的工件)。
  • 当您部署工件时,它将部署在您的本地计算机上,其他任何人都无法使用。这对于测试目的很有用(作为一些虚假的远程存储库),但是当您生成实际的最终工件时,您希望它们在全球范围内可用(例如在公司工件管理器上、在 Central 上等)。李>

简而言之,这是安装和下载时使用的本地存储库与部署或发布时使用的远程存储库之间的区别。他们可能会感到困惑,因为远程存储库很可能是基于文件的存储库(如本地存储库)but their semantics are really different。另见in the Maven docs

本地存储库是指您自己安装的副本,它是远程下载的缓存,还包含您尚未发布的临时构建工件。

远程存储库是指任何其他类型的存储库,可通过多种协议访问,例如file://http://。这些存储库可能是由第三方设置的真正远程存储库,以提供其工件以供下载 [...]。其他“远程”存储库可能是在您公司的文件或 HTTP 服务器上设置的内部存储库,用于在开发团队之间共享私有工件并用于发布。

您应该完全删除该配置,如果您真的想将工件放入本地存储库,请使用 mvn clean install

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-17
    • 2011-12-09
    • 1970-01-01
    • 2014-04-27
    • 2020-01-09
    • 2012-01-19
    • 2013-03-03
    • 1970-01-01
    相关资源
    最近更新 更多