简介
应用 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/s…,而后应用该账户创立一个 Project ticket,创立 ticket 地址:https://issues.sonatype.org/s…
一般来说会在 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.jar
example-application-1.4.7-javadoc.jar
如果的确没有 javadoc 和源代码文件,比方 Scala 我的项目,那么须要创立一个假的文件来通过验证。
应用 GPG/PGP 给文件签名
所有的文件都须要应用 GPG/PGP 进行签名,生成一个.asc 后缀的文件,比方对应上面的文件:
example-application-1.4.7.pom
example-application-1.4.7.jar
example-application-1.4.7-sources.jar
example-application-1.4.7-javadoc.jar
须要生成:
example-application-1.4.7.pom.asc
example-application-1.4.7.jar.asc
example-application-1.4.7-sources.jar.asc
example-application-1.4.7-javadoc.jar.asc
Metadata 文件
Metadata 文件也就是须要提交的 pom 文件。这是 Apache Maven 用来定义我的项目及其构建的 Project Object Model 文件。应用其余工具进行构建时,必须对其进行组装并确保其蕴含上面几项必须的信息。
除了必须的信息外,还倡议蕴含我的项目的正确依赖关系,以便构建工具能够应用该信息正确地解决传递依赖关系,并且不须要用户手动治理依赖关系。
- 我的项目坐标信息,也叫做 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
。
- 我的项目名字,形容和 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>
- License 信息
<licenses>
<license>
<name>The Apache License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
</license>
</licenses>
- 开发者信息
<developers>
<developer>
<name>Manfred Moser</name>
<email>manfred@sonatype.com</email>
<organization>Sonatype</organization>
<organizationUrl>http://www.sonatype.com</organizationUrl>
</developer>
</developers>
- 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/
最艰深的解读,最粗浅的干货,最简洁的教程,泛滥你不晓得的小技巧等你来发现!
欢送关注我的公众号:「程序那些事」, 懂技术,更懂你!