2012-07-25 28 views
2

Maven如何与Nexus和Artifactory等不同的存储库进行交互?Maven如何与不同的存储库进行交互?

它是否使用其REST API完成的?可以将相关的工件解析为实际位置以使它们不使用这些API,但是这两个API彼此之间有点不同(就我所见,[Artifactory][Nexus]),并且Maven pom文件中的存储库定义元素不包含属性来声明存储库的类型。

那么Maven如何解决工件的groupId,artifactId和版本到不同存储库中的实际文件?这些存储库是否实现了一些其他标准化的API,使Maven能够以与存储库无关的方式向它们请求文件?

回答

1

同比定义库搜索文物在2种方式:

1)在你的pom.xml项目部分

<project> 
    .... 
    <repositories> 
     <repository> 
      ... 
      <url>...</url> 
     </repository> 
    </repositories> 
</project> 

2)和/或文件$USER_HOME$/.m2/settings.xml(上有WEB大量实例)

Maven通过使用存储库URL构建工件URL并根据工件组,id,版本,类型和分类添加路径来下载工件。而在转换的groupId进入点 '/'

RepoUrl/groupId/artifactId/version/artifactId-version-classifier.type 

例子:

https://repository.apache.org/content/repositories/releases/commons-io/commons-io/2.4/commons-io-2.4.jar 

https://repository.apache.org/content/repositories/releases/commons-io/commons-io/2.4/commons-io-2.4-sources.jar 

https://repository.apache.org/content/repositories/releases/commons-io/commons-io/2.4/commons-io-2.4-javadoc.jar 

这是惯例,它是独立于Artifactory的或Nexus。这是Maven。一切都通过HTTP或HTTPS传输。另外Maven出于安全目的处理MD5和SHA1文件。

一旦下载,工件上的工件存储在本地存储库中的$USER_HOME$/.m2/repositories(它具有类似于远程存储库的结构),充当缓存和代理。

通常Artifactory或Nexus是一种本地缓存和代理公司级别的一些功能来管理它。他们当然会主持由公司开发人员发布的Maven工件。

看起来像一个3级的仓库:本地 - 本地公司 - 全球

+0

谢谢,这是非常有益的!你有这种形式的参考吗?'RepoUrl/groupId/version/artifactId-version-classifier.type'约定? – 2012-07-26 08:41:37

+1

@ Ido.Co [链接] http://docs.codehaus.org/display/MAVEN/Repository+Layout+-+Final)似乎是你想要的。这是谷歌第二次参考“maven资源库布局”。 (他是我们的朋友:) – andrey 2012-07-26 14:40:33

+0

再次感谢。它总是很容易,当你知道谷歌什么期限:) – 2012-07-26 15:50:22

0

maven使用普通的http调用来与存储库进行交互。你不需要任何东西,只需要一个http服务器来提供一个maven仓库。 maven依赖于特定的目录层次结构和一些元数据文件。 (磁盘存储库上的本地磁盘存储库,其中已下载的maven高速缓存文件的格式完全相同)。

1

Maven使用某种命名约定。在pom.xml定义库(如http://download.java.net/maven/2/)的根URL,然后Maven是能够通过构建一个URL来解决一个神器:

<root URL>/${group id where dots are replaced by slashes}/${artifact id}/${version} 

所以对于以下依赖

<groupId>org.apache.lucene</groupId> 
<artifactId>lucene-core</artifactId> 
<version>2.0.0</version> 

Maven会尝试找到poms和jar在http://download.java.net/maven/2/org/apache/lucene/lucene-core/2.0.0

这意味着遵循这个约定的每个URI都可以作为Maven回购。

相关问题