【问题标题】:What is the maven repository protocol?什么是 Maven 存储库协议?
【发布时间】:2013-03-25 11:04:48
【问题描述】:

我最近学习了很多关于 Maven 的知识,印象非常深刻。我在哪里可以找到有关以与 Maven 相同的方式与存储库进行通信、部署和检索的信息?这是通过一些已发布的协议完成的吗?

我找到了有关 OSGI(和 OBR)的信息,但不知道这是否是我应该研究的。

我想在 .net 中执行此操作(无论出于何种原因)。如果有人可以将我指向正确的组件,我不介意查看 java 源代码,但更愿意指向协议规范。

[编辑] 我看到很多关于 HTTP 的答案。我想进一步澄清一下,我不是在寻找传输协议,而是在寻找 API 协议。例如,简单对象访问协议 (SOAP) 使用超文本传输​​协议来传输消息。 Maven的访问协议是什么?

【问题讨论】:

  • 我不是 100% 确定,但我认为这只是带有 GET 和 POST 的普通 http。
  • 我根本看不出 OSGi 是如何相关的。在任何情况下,还要注意有几个项目使用 Maven 存储库,例如 Gradle、Ivy 等。
  • 这与您的问题没有直接关系,但仅供参考,我们在使用 Maven 使用 Sonar 的 maven-dotnet-plugin(来自 codehaus.org)构建 C# 项目方面取得了非常好的成功。既然你提到了 .NET 和 Maven,我只是想我会把它扔掉。
  • 谢谢艾伦,我正在开发自己的构建系统。我真的很喜欢 Maven 结构,所以我想使用 POM 和 maven 存储库,而不需要提交系统的完整端口。我的挑战是要么掏空 maven,要么移植到足以做我想做的事情的程度。我选择后者。

标签: java maven maven-2


【解决方案1】:

正如 khmarbaise 已经说过的,在大多数情况下传输协议是 http(s),但还有其他可用的协议,例如本地存储库、WebDAV、SCP、SFTP 等的简单文件访问。 maven 存储库更像是一种特殊的目录布局。有些服务器(例如 Nexus 或 Artifactory)提供额外的功能,例如代理远程存储库或某些检查(例如身份验证)。

https://maven.apache.org/guides/introduction/introduction-to-repositories.html

取自 http://wiki.jfrog.org/confluence/display/rtf/repository+layouts Maven 存储库布局: [orgPath]/[module]/[baseRev](-[folderItegRev])/[module]-[baseRev](-[fileItegRev])(-[classifier]).[ext]

示例 org/eclipse/jetty/jetty-ajp/7.0.2.v20100331/jetty-ajp-7.0.2.v20100331.jar

【讨论】:

  • 在您的回答中,我是否应该假设“Maven 存储库布局”转换为 REST API?那就是我可以调用 GET http://www.myrepo.com/my.org/myartifact/1.0/item.jar 并获取我的工件吗?
  • 是的,如果您使用像 Artifactory、Nexus 这样的服务器,或者如果您只是按照布局并使用普通的 HTTP 服务器,那么它将使用简单的 GET,但版本在文件中重复,并且orgId 展开myrepo.com/my/org/myartifact/1.0/myartifact-1.0.jar
【解决方案2】:

.net 的常用协议是 http,而且已经存在一个称为 nuget 的解决方案,它已经支持该协议并与一些存储库管理器(如 neuxs 和 artifactory)一起使用。

啊...Maven 使用它自己的协议。没有 SOAP 等。可能看看here 会有所帮助。还有this.

更新 您可以通过 wget 简单地从 Maven 存储库下载工件......这只是一个 http-get 操作。上传一个工件只是一个 http-put ...你可以通过 curl 来做到这一点。

【讨论】:

  • 更准确地说,Nexus 支持使用 Maven 期望的结构来公开人工制品。
  • 这个答案离题了。我询问了 Maven,而您正在告诉我有关 Nuget 的问题。 (否决票)
  • 但是您要求 我想在 .net 中执行此操作(无论出于何种原因)。 嗯..有趣...我只是想提示一下这样的已经存在了。
  • 没错。我不是要以任何方式简单地获取包裹。 “this”是指通过 Maven 协议进行通信。
  • wagon 并不是真正的协议,从某种意义上说,它并没有说明必须通过网络连接传输什么。它只是一个统一的 API,最终实现了“将$ARTEFACT 上传到存储库$URL”的概念。它更像是人工制品部署协议必须满足的客户端规范。
【解决方案3】:

严格来说,Maven 没有特殊的访问协议。 Maven 使用纯 HTTP 从存储库中获取工件。存储库应该有特殊的布局,即 URL 结构(简单地投影到通常的目录结构)。您可以通过以特殊方式组织目录来组织自己的 repo:[orgPath]/[module]/[baseRev](-[folderItegRev])/[module]-[baseRev](-[fileItegRev])(-[classifier]).[ext],而无需在服务器端使用任何特殊软件。

所以,它更多的是关于目录结构而不是特殊协议。非常简单和有效的方法。

当然,如果您想围绕它提供其他服务(如搜索、访问控制、统计等),您应该自己做。这就是JFrog 对其Artifactory 产品所做的事情。

【讨论】:

    【解决方案4】:

    据我所知,并没有真正的协议。 Maven 存储库只是通过 HTTP(或在本地目录中)可用的特定资源结构。有一个有点过时的description available at Codehaus

    “部署到”存储库意味着以您希望的任何方式上传文件,只要以后可以从上述布局中获取。 documentation for the deploy plugin 提供了 FTP 和 SSH 的示例,这意味着将简单的文件上传到这样的目录结构中。但是您也可以将文件上传到自定义 Web 服务,该服务将它们存储在数据库中,然后通过 HTTP 适当地公开。 Maven 不会真的在乎。工件部署、存储和存储库访问是解耦的。

    【讨论】:

      【解决方案5】:

      HTTP GET,格式如下:

      GET /content/repositories/approved-from-central/commons-logging/commons-logging-api/1.1/commons-logging-api-1.1.pom HTTP/1.1
      Cache-control: no-cache
      Cache-store: no-store
      Pragma: no-cache
      Expires: 0
      Accept-Encoding: gzip
      User-Agent: Apache-Maven/3.3.9 (Java 1.8.0_102; Windows 7 6.1)
      Host: localhost
      Connection: Keep-Alive
      

      我在这里记录了它http://www.javamonamour.org/2017/10/maven-to-repository-protocol.html

      【讨论】:

        猜你喜欢
        • 2020-04-22
        • 2014-12-08
        • 2011-04-28
        • 2019-10-28
        • 2011-04-11
        • 2017-08-06
        • 2016-05-30
        • 2019-04-08
        • 1970-01-01
        相关资源
        最近更新 更多