2017-01-17 37 views
2

是否加入这个仓库进入到pom.xml有意义吗?为什么在POM中添加Maven本地存储库作为distributionManagement?

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

我一直以为默认情况下会包含本地回购。

我知道的事实,这将不会在Windows上构建。我在我的公司发现了上面的条目pom.xml

+0

不,我不这样做。我的本地.m2完全按照它的原样工作,没有明确地将它作为添加到我的pom.xml中。我在Windows 7上运行,所以它不是关于Microsoft操作系统。看起来像某人的错误。 – duffymo

+1

这看起来好像有人不知道'mvn install'是干什么的? – khmarbaise

回答

3

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

记住<distributionManagement>配置哪里Maven将部署和释放你的假象。有了这一点的配置,Maven会将工件释放到您的本地存储库中;这是有问题的:

  • 您的本地存储库应该是下载和安装的依赖关系的缓存,它可以在任何时候完全删除和删除;一切都应该仍然有效(Maven只会重新下载依赖关系)。实际上,在每个构建具有不同本地存储库的CI系统上进行清理构建并不奇怪,以便每个构建完全独立于其他构建(并且不依赖于以前下载的构件)。
  • 当你将部署文物,它会被部署在本地计算机上,无法给任何人。这对于测试目的非常有用(像一些虚假的远程存储库),但是当您生成实际的最终工件时,您希望它们全局可用(例如在公司工件管理器,Central等)。

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

本地资源库是指你自己安装的副本是远程下载的缓存,同时还包含了你还没有发布的临时构建构件。

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

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

相关问题