maven 中心仓库 OSSRH 使用简介
简介
使用 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 匹配,就会立即进行验证。
对于其他的域名,可以通过下面两种方式之一来进行域名的验证:
使用 TXT 文件验证:在域名下创建一个代表 OSSRH ticket number 的 TXT 文件来进行验证。
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 结尾,比如:
其对应的 javadoc 文件和源代码文件如下:
如果确实没有 javadoc 和源代码文件,比如 Scala 项目,那么需要创建一个假的文件来通过验证。
使用 GPG/PGP 给文件签名
所有的文件都需要使用 GPG/PGP 进行签名,生成一个.asc 后缀的文件,比如对应下面的文件:
需要生成:
Metadata 文件
Metadata 文件也就是需要提交的 pom 文件。 这是 Apache Maven 用来定义项目及其构建的 Project Object Model 文件。 使用其他工具进行构建时,必须对其进行组装并确保其包含下面几项必须的信息。
除了必需的信息外,还建议包含项目的正确依赖关系,以便构建工具可以使用该信息正确地解决传递依赖关系,并且不需要用户手动管理依赖关系。
项目坐标信息,也叫做 GAV。包括 groupId ,artifactId 和 version,如下所示:
除此之外,如果项目不是 jar 包,还需要包含 packaging 信息,有效的值包括: jar
, war
,ear
, pom
, maven-plugin
, ejb
, rar
, par
, aar
和 apklib
。
项目名字,描述和 URL 信息:
还可以使用变量来构建项目名:
License 信息
开发者信息
SCM 信息
SCM 是你项目的地址,如果使用的 svn 可以这样写:
如果使用的 github 可以这样写:
部署
部署的目的是将生成的组件部署到本地的仓库中,有很多工具可以使用,最常见的就是 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/
最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!
欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!
版权声明: 本文为 InfoQ 作者【程序那些事】的原创文章。
原文链接:【http://xie.infoq.cn/article/01a125a89b45918bdd06b1493】。文章转载请联系作者。
评论