将工件上载到中央存储库的指南

为了让Maven的用户利用您的项目生成的工件,您必须将它们部署到远程存储库。许多开源项目希望允许使用Maven构建的项目的用户透明地访问其项目的工件。为了实现这一点,项目应该将其工件部署到中央知识库.

要求

  1. 发布:仅限发布可以上传到中央存储库,这意味着文件不会更改,并且只依赖于存储库中已发布和可用的其他文件,
  2. javadoc和源代码对于IDE查找,
  3. PGP签名,
  4. 最低POM信息:对中央存储库中的POM中的最少信息有一些要求,请参阅在这里,
  5. 协调:为项目选择合适的坐标很重要。请参阅指南在这里,尤其是在groupId和域所有权.

可以找到更新后的需求列表在这里.

解释

有人问过“为什么我们需要部署工件的POM中的所有这些信息?”,所以这里有一个小的解释。

与工件一起部署的POM是在Maven中实现传递依赖性的过程的一部分。让可传递依赖项发挥作用的逻辑其实并没有那么难,问题是获取数据。通过使所有POM都可用于工件而使其他应用程序成为可能的应用程序非常庞大,因此,通过将它们作为过程的一部分放入中央存储库,我们为涉及统一访问项目POM的新想法打开了大门。

我们要求许可证是因为您的项目的许可证可能在其生命周期内发生更改,我们正在尝试创建工具来帮助解决许可问题。例如,了解特定工件图的所有许可证,我们可以使用一些策略来识别潜在的许可问题。

基本示例:

<项目><modelVersion>4.0.0<groupId>org.apache.maven</groupId><artifactId>maven</artifactId><版本>2.0<打包>罐子</packing>Maven核心maven主核心项目描述<网址>http://maven.apache.org</url><许可证><许可证>Apache许可证2.0版<网址>http://www.apache.org/licenses/LICENSE-2.0.txt</url><分销>回购</分销></许可证></许可证><供应链管理><网址>https://svn.apache.org/viewvc/maven</url></scm><依赖项><依赖性><groupId></组Id><artifactId></artifactId><版本></版本></依赖性>...</依赖项><!--不推荐:(请参阅常见问题解答)<存储库><pluginRepositorys></pluginRepositorys>--></项目>

PGP签名

当人们从中央存储库下载工件时,他们可能希望根据公钥服务器验证这些工件的PGP签名。如果没有签名,那么用户就不能保证他们正在下载原始工件。

为了提高中央存储库的质量,我们要求您为所有工件(校验和除外的所有文件)提供PGP签名,并将公钥分发到密钥服务器,如http://pgp.mit.edu.阅读使用PGP签名了解更多信息。

常见问题和常见错误

  • 我还有其他存储库插件存储库在我的POM中列出,这是一个问题吗?

    目前,这不会阻止您的项目被包括在内,但我们强烈建议确保您的所有依赖项都包含在中央存储库中。如果您依赖于包含垃圾或消失的粗略存储库,这只会给下游用户带来混乱。尝试在可靠的回购(如Central、Jboss等)之间保持依赖性。

  • 那些由于许可证而无法分发的工件呢?

    在这种情况下,只需要该依赖项的POM,列出可以从何处下载依赖项。查看示例.

  • 我在foo.com上开发了foo项目的补丁版本组Id我应该用吗?

    当您修补/修改第三方项目时,该修补版本将成为您的项目,因此应在组Id你控制着你将要开发的任何项目,永远不会在com.foo公司参见上述关于组Id.

  • 我的项目由SourceForge或Github等项目托管服务托管,我应该使用什么作为groupId?

    如果您的项目名称是foo公司在SourceForge中,您可以使用网络sf.foo。如果您的用户名是酒吧在Github上,你可以使用com.github.bar公司。您也可以使用您控制的另一个反向域名。组ID不必反映项目主机。

将您的工件发布到中央存储库

批准的存储库托管

我们现在鼓励项目使用批准的存储库托管位置,而不是为每个项目维护存储库rsync提要。

当前批准的存储库托管位置:

将为Forges提供自动发布,Forges为OSS项目和其他符合某些最低标准的大型项目存储库提供托管服务,如PGP密钥和pom内容的验证,如上所述。如果你有兴趣成为一名合格的锻造工,联系我们.

其他项目

上传另一个项目的最简单方法是使用开源软件库托管(OSSRH),这是Sonatype为提供的经批准的存储库任何希望将其工件放入中央存储库的OSS项目。

解释

在2010年1月之前,让每个项目使用rsync到中央存储库来维护自己的存储库是首选的过程。然而,我们不再接受基于每个项目的rsync请求。

随着时间的推移,我们了解到这个过程是不可伸缩的。许多被同步的项目很少发布,但我们必须每天数次访问数百个服务器,以寻找不改变的工件。此外,目前还没有通过rsync验证传入数据的良好机制,这会导致影响每个人的错误元数据。

将项目聚合为更大的提要可以让我们更快、更频繁地同步,确保这些位置执行足够的检查可以提高每个人的元数据质量。