写点什么

maven 中心仓库 OSSRH 使用简介

发布于: 2021 年 04 月 09 日

简介

使用 java 做项目的朋友肯定对 maven 不陌生,maven 为我们提供了一个中心仓库,我们在构建 java 项目时,直接从 maven 中心仓库中下载依赖的 jar 包到本地,然后打包进行构建。

所有人都知道有这样一个 maven 仓库,但是很少有人去探寻这个 maven 仓库到底在什么地方,能不能发布自己的 jar 包到中心仓库呢?今天给大家介绍一下 maven 中心仓库和 OSSRH 的使用。

为什么使用中心仓库

maven 中心仓库的地址是 https://search.maven.org/#browse , 我们可以通过该链接去查找需要的 jar 包,而这些 jar 包都是各个开源组织发布上去的。

这个中心仓库是 Apache Maven, SBT 默认的 repository。同时还可以支持 Apache Ant/Ivy, Gradle 等构建工具的使用。

现在的软件界是开源的软件界,越来越多的人和企业愿意在网络上贡献自己的代码,于是有了 maven 社区的中心仓库,可以方便任何人共享和使用 jar 包。

发布到中心仓库前的准备工作

发布到中心仓库是需要权限的,我们需要注册我们的项目也就是 artifacts id,并且指定需要将项目发布到哪里。

Sonatype 提供了一个叫做开源软件资源库托管 Open Source Software Repository Hosting (OSSRH) 的工具,帮助我们来方便的将项目发布到中心仓库中。它是项目所有者和贡献者将其组件发布到中央资源库的主要途径。

我们需要选择一个你所拥有的 domain 作为 groupId,对于 GitHub groupId(io.github.username),只要您的项目 URL 与所请求的 groupId 匹配,就会立即进行验证。

对于其他的域名,可以通过下面两种方式之一来进行域名的验证:

  1. 使用 TXT 文件验证:在域名下创建一个代表 OSSRH ticket number 的 TXT 文件来进行验证。

  2. GitHub 重定向:设置你的域名到托管项目的 GitHub URL 的重定向。

使用 OSSRH

Sonatype OSSRH(OSS 存储库托管)使用 Sonatype Nexus 存储库管理器为开源项目二进制文件提供存储库托管服务。 OSSRH 使用的是 Maven 存储库格式,我们可以部署开发版本的二进制文件 snapshots,阶段发布二进制文件,还可以升级二进制文件并将其同步到中央仓库中。

使用 Sonatype 创建 ticket

Sonatype 使用 JIRA 来管理创建请求,所以我们需要首先创建一个 JIRA 账号,创建账号地址: https://issues.sonatype.org/secure/Signup!default.jspa , 然后使用该账户创建一个 Project ticket,创建 ticket 地址:https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134

一般来说会在 2 个工作日内进行审核。

中央仓库中的组件要求

不同于我们自己的私人仓库,中央仓库中的组件的格式是有一定要求的。我们需要遵循它的格式规范。

提供 Javadoc 和源代码

除了 pom 文件之外,还需要提供 javadoc 文件和源代码文件。这样的目的是方便在 IDE 中直接访问使用。

这些文件的命名遵循 Maven 存储库格式的命名约定,使用 artifactId 加上 version 作为文件名称,并根据类型使用 javadoc 或者 sources 作为名字的区分,以 jar 结尾,比如:

<groupId>com.example.applications</groupId><artifactId>example-application</artifactId><version>1.4.7</version>
复制代码

其对应的 javadoc 文件和源代码文件如下:

example-application-1.4.7-sources.jarexample-application-1.4.7-javadoc.jar
复制代码

如果确实没有 javadoc 和源代码文件,比如 Scala 项目,那么需要创建一个假的文件来通过验证。

使用 GPG/PGP 给文件签名

所有的文件都需要使用 GPG/PGP 进行签名,生成一个.asc 后缀的文件,比如对应下面的文件:

example-application-1.4.7.pomexample-application-1.4.7.jarexample-application-1.4.7-sources.jarexample-application-1.4.7-javadoc.jar
复制代码

需要生成:

example-application-1.4.7.pom.ascexample-application-1.4.7.jar.ascexample-application-1.4.7-sources.jar.ascexample-application-1.4.7-javadoc.jar.asc
复制代码

Metadata 文件

Metadata 文件也就是需要提交的 pom 文件。 这是 Apache Maven 用来定义项目及其构建的 Project Object Model 文件。 使用其他工具进行构建时,必须对其进行组装并确保其包含下面几项必须的信息。

除了必需的信息外,还建议包含项目的正确依赖关系,以便构建工具可以使用该信息正确地解决传递依赖关系,并且不需要用户手动管理依赖关系。

  1. 项目坐标信息,也叫做 GAV。包括 groupId ,artifactId 和 version,如下所示:

<groupId>com.example.applications</groupId><artifactId>example-application</artifactId><version>1.4.7</version>
复制代码

除此之外,如果项目不是 jar 包,还需要包含 packaging 信息,有效的值包括: jar , war ,ear , pom , maven-plugin , ejb , rar , par , aar 和 apklib 。

  1. 项目名字,描述和 URL 信息:

<name>Example Application</name><description>A application used as an example on how to set up pushing   its components to the Central Repository.</description><url>http://www.example.com/example-application</url>
复制代码

还可以使用变量来构建项目名:

<name>{project.groupId}:{project.artifactId}</name>
复制代码
  1. License 信息

<licenses>  <license>    <name>The Apache License, Version 2.0</name>    <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>  </license></licenses>
复制代码
  1. 开发者信息

<developers>    <developer>      <name>Manfred Moser</name>      <email>manfred@sonatype.com</email>      <organization>Sonatype</organization>      <organizationUrl>http://www.sonatype.com</organizationUrl>    </developer>  </developers>
复制代码
  1. SCM 信息

SCM 是你项目的地址,如果使用的 svn 可以这样写:

<scm>  <connection>scm:svn:http://subversion.example.com/svn/project/trunk/</connection>  <developerConnection>scm:svn:https://subversion.example.com/svn/project/trunk/</developerConnection>  <url>http://subversion.example.com/svn/project/trunk/</url></scm>
复制代码

如果使用的 github 可以这样写:

<scm>  <connection>scm:git:git://github.com/simpligility/ossrh-demo.git</connection>  <developerConnection>scm:git:ssh://github.com:simpligility/ossrh-demo.git</developerConnection>  <url>http://github.com/simpligility/ossrh-demo/tree/master</url></scm>
复制代码

部署

部署的目的是将生成的组件部署到本地的仓库中,有很多工具可以使用,最常见的就是 Apache Maven,其他的构建工具比如 Apache ant、Gradle、sbt 等都可以很方便的构建项目。

注意,OSSRH 单个文件有上传大小限制,最大为 1024MB。如果需要上传更大的组件,需要联系 sonatype。

上传到中央仓库

本地部署好之后,就可以上传到中央仓库了。

可以使用 Nexus Staging Maven Plugin 或者 Ant Tasks 来通过命令行上传。也可以直接浏览器访问 https://oss.sonatype.org/ 来上传。

一旦发布,组件会在 10 分钟之内发布到中央仓库,并且在 2 个小时之内,可以从中央仓库搜索到。

我们以浏览器发布为例来看一下具体的步骤。

首先使用 JIRA 创建的用户名和密码登录到 https://oss.sonatype.org/



登录之后,在左下角可以看到 Build Promotion 选项,我们选择 Staging Repositories ,就会展示目前处于 stage 状态的仓库。

在部署过程中创建的 stage 存储库会有一个名称,该名称以项目的 groupId 开头(删除其中的点),带有破折号和 4 位数字。 例如。 如果您的项目 groupId 为 com.example.applications,则 staging 配置文件名称将以 comexampleapplications 开头。 序列号从 1000 开始,并且随着部署的增加而增加,比如:comexampleapplication-1010。

选择 staging 存储库,列表下方的面板将显示有关存储库的更多详细信息。 另外,可以点击 Close Release 按钮。



部署完成后,状态会变成 Open,点击 close 会触发对组件的校验,如果校验成功,那么可以点击 release 按钮将其部署到中央仓库中。

如果选择使用 Nexus Staging Maven 插件或 Ant 任务进行部署,可以直接在命令行进行。

本文已收录于 http://www.flydean.com/04-maven-ossrh/

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

发布于: 2021 年 04 月 09 日阅读数: 18
用户头像

关注公众号:程序那些事,更多精彩等着你! 2020.06.07 加入

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧,尽在公众号:程序那些事!

评论

发布
暂无评论
maven中心仓库OSSRH使用简介