Java 什么是maven存储库协议?

Java 什么是maven存储库协议?,java,maven,maven-2,Java,Maven,Maven 2,最近我学到了很多关于Maven的知识,给我留下了深刻的印象。在哪里可以找到与Maven相同的方式与存储库通信、部署到存储库和从存储库检索的信息?这是通过公布的协议来实现的吗 我已经找到了有关OSGI(和OBR)的信息,但无法确定这是否是我应该研究的内容 我想在.net中这样做(无论出于什么原因)。如果有人能给我指出正确的组件,我不介意查看java源代码,但我更愿意指出协议规范 [编辑]我看到了很多关于HTTP的答案。我想进一步澄清,我不是在寻找传输协议,我是在寻找API协议。例如,简单对象访问协

最近我学到了很多关于Maven的知识,给我留下了深刻的印象。在哪里可以找到与Maven相同的方式与存储库通信、部署到存储库和从存储库检索的信息?这是通过公布的协议来实现的吗

我已经找到了有关OSGI(和OBR)的信息,但无法确定这是否是我应该研究的内容

我想在.net中这样做(无论出于什么原因)。如果有人能给我指出正确的组件,我不介意查看java源代码,但我更愿意指出协议规范


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

通常的协议是http。此外,对于.net,已经存在一个名为的解决方案,该解决方案已经支持该协议,并与一些存储库管理器(如neuxs和artifactory)配合使用

啊…Maven使用自己的协议。没有肥皂等,可能一看会有点帮助。而且

更新
您可以通过wget从Maven存储库下载一个工件,这只是一个HTTPGET操作。上传一个工件只是一个http put…你可以通过curl来实现。

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

取自 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存储库只是通过HTTP(或本地目录)提供的特定资源结构


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

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

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


当然,如果你想获得更多的服务(如搜索、访问控制、统计等),你应该自己做。这就是它的产品

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

我在这里记录了它

我不是100%确定,但我认为它只是简单的http与GET和POST。我根本不知道OSGi是如何关联的。在任何情况下,还要注意,有几个项目使用Maven回购协议,比如Gradle、Ivy等。这与您的问题没有直接关系,但仅供参考,我们已经非常成功地使用Maven使用Sonar的Maven dotnet插件(来自codehaus.org)构建了C#项目。自从你提到.NET和Maven,我就想把它扔出去。谢谢Allan,我正在开发自己的构建系统。我非常喜欢Maven结构,所以我希望使用POMs和Maven存储库,而不必提交到系统的完整端口。我的挑战是要么推出maven,要么移植到我想要的东西上。我选择后者。更确切地说,Nexus支持使用Maven期望的结构公开人工制品。这个答案离题了。我问过Maven,你却告诉我Nuget。(否决票)但你要求我在.net中这样做(无论出于什么原因)。嗯……有意思……我只是想暗示一下,像这样的事情已经存在了。这是正确的。我不是简单地要求以任何方式获得包裹。“这”指的是通过Maven协议进行通信。
wage
实际上不是一个协议,从这个意义上说,它没有说明必须通过网络连接传输什么。它只是一个统一的API,最终实现了“将
$artifact
上传到存储库
$URL
”的概念。人工制品部署协议必须满足更多的客户端规范?也就是说,我可以调用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