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

时间:2017-01-17 10:07:21

标签: maven

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

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

我一直认为默认会包含本地回购。

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

1 个答案:

答案 0 :(得分:3)

这里有几个问题。不,这样做没有意义,但不是因为默认包含它 - 它不是 - 但是因为这是一件非常错误的事情。

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

  • 您的本地存储库应该是已下载和安装的依赖项的缓存,可以随时删除和删除;一切都应该仍然有效(Maven将重新下载依赖项)。实际上,在每个构建都具有独特本地存储库的CI系统上使用干净构建并不令人惊讶,因此每个构建完全独立于其他构建(并且不依赖于先前下载的构件)。
  • 当您部署工件时,它将部署在您的本地计算机上,对其他任何人都无法使用。这对于测试目的非常有用(如某些假的远程存储库),但是当您生成实际的最终工件时,您希望它们全局可用(例如,在公司工件管理器上,中央等)。

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

  

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

     

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

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