2010-02-08 124 views
44

哪里是指定maven项目所需储存库的最佳位置,pom.xmlsettings.xml?每个地点有什么优点和缺点?什么是最佳做法?哪里是指定maven仓库,pom.xml或settings.xml的最佳位置?

在我看来,在POM定义库是有很多原因更好:

  • 重复性:从属文物是从在POM显式声明的已知位置来。用户配置不当的存储库导致问题的机会也较少。
  • 可移植性:此POM将建立在安装了maven的任何人的机器上。对额外的用户配置的存储库设置没有额外的要求。
  • 易用性:新开发人员更容易检索和构建项目,因为安装的配置较少。

也许一个反面的是,如果在未来的存储库的位置发生变化,需要安装或旧的软件补丁发布需要被释放指定新的存储库位置代理(或.m2/settings.xml可以随时提供额外的存储库作为最后的手段)。但是,这似乎是发布管理中良好的可重复性和可移植性的必要分支,而不是一个骗局。

还有其他想法吗?

+2

如果回购库位发生变化,您只需更新pom并确保每个人都刷新其本地副本。 – 2010-02-08 23:09:20

+0

正确,但旧版本可能已作为发行版发布(例如:zip,tar.gz)。重现性的一个好处是您可以采取任何分配/版本,无​​论出于何种原因应用补丁,并且您都可以获得确切的功能分布以及补丁,而无需其他任何补丁。 – jnorris 2010-02-08 23:13:34

+0

我的意见与@jnorris完全一致,但Sonatype提供了一些要考虑的问题(可能过时了?):关于将URL保留在分布式POM文件中:http://blog.sonatype.com/2009/02/why-putting-repositories-in - 你的poms是一个坏主意/ – chrisinmtown 2017-12-26 16:30:52

回答

44

哪里是指定Maven项目需要的存储库,pom.xml或settings.xml的最佳位置?每个地点有什么优点和缺点?什么是最佳做法?

我会亲自定义项目pom.xml中的特定项目所需的存储库,因为它使构建更加便携。仅在我看来,settings.xml文件应该用于用户特定或秘密事物。没有什么,要求用户添加存储库位置,即使这是正确记录,不知何故击败了maven的功能之一(透明依赖处理),我不喜欢这个想法。

我认为使用settings.xml来处理存储库的唯一“好”用例是当你有一个公司存储库并希望Maven使用这个存储库而不是公共存储库时。例如,为了避免任何公共资源库连接,你将宣布公司资源库中的所有的人的一面镜子:

<settings> 
    ... 
    <mirrors> 
    <mirror> 
     <id>proxy-of-entire-earth</id> 
     <mirrorOf>*</mirrorOf> 
     <name>Maven Repository Manager running on repo.mycompany.com</name> 
     <url>http://repo.mycompany.com/proxy</url> 
    </mirror> 
    </mirrors> 
    ... 
</settings> 
+0

+1。这解决了我自己在琢磨这个问题时想到的“假设”。 1)如果镜像“消失”并且您需要提供一个新镜像(如果该项目未被维护并且您想要保持原始树原始状态),该怎么办?在settings.xml中设置镜像2)如果您只想在某些环境中使用私有本地报告,该怎么办?按照您的建议在settings.xml中使用通配符镜像。 – 2012-09-21 06:46:22

+0

FWIW,此信息现在也在Maven文档中http://maven.apache.org/guides/mini/guide-mirror-settings.html#Using_A_Single_Repository – 2013-04-03 19:00:39

15

我建议你阅读有关的主题this博客文章。

+2

[总是引用重要链接中最相关的部分,以防万一目标站点无法访问或永久脱机。](http://stackoverflow.com/help/how-to-answer) – Poke 2017-03-02 16:15:50

2

我总是把URL放在POM和密码settings.xml中。如果将URL放在settings.xml中,则如果URL发生更改,则需要用户更新其本地系统上的文件。如果URL是在您的POM中指定的,则可以更改它并推送新版本。网址的变化比大多数人预测的要更频繁,并且在构建中断时导致用户感到沮丧。

密码保存在settings.xml中,原因很明显。密码不应该保存在版本控制中。您需要密码才能将mvn部署功能部署到远程存储库。

+0

要查看应如何设置〜/ .m2/settings.xml的示例,请参阅http ://stackoverflow.com/questions/2941605/sample-settings-xml-for-maven – akauppi 2016-06-30 11:34:15

相关问题