为什么将Maven本地存储库添加为POM中的distributionManagement?

Hub*_*iak 5 maven

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

...
<distributionManagement>
    <repository>
        <id>dev</id>
        <name>Local repository</name>
        <url>file://${user.home}/.m2/repository</url>
    </repository>
...
Run Code Online (Sandbox Code Playgroud)

我一直以为默认情况下将默认包含本地仓库。

I am aware of the fact this won't build on Windows. I found the entry above in a pom.xml at my company.

Tun*_*aki 4

这里有几个问题。不,这样做没有意义,但不是因为默认情况下包含它\xe2\x80\x94,它不是\xe2\x80\x94,而是因为这是非常错误的做法。

\n\n

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

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

简而言之,这就是安装和下载时使用的本地存储库与部署或发布时使用的远程存储库之间的区别。它们可能会被混淆,因为远程存储库很可能是基于文件的存储库(如本地存储库),但它们的语义确实不同。另请参阅Maven 文档

\n\n
\n

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

\n\n

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

\n
\n\n

您应该完全删除该配置,mvn clean install如果您确实想将工件放入本地存储库,则可以使用该配置。

\n