发布项目到 Maven 的中央仓库

本贴最后更新于 2564 天前,其中的信息可能已经天翻地覆

最近在研发一套 DNS Server,项目比较大,有部分模块被拆分出来做为独立的板块研发。然后通过 Maven 进行管理,可问题来了,我自己写的 maven 项目在 maven 的中央仓库下载不到呀...怎么办,上传到 maven 的中央仓库呗。

前言

我之前写过一篇博文通过 Github 与 Packagist 建立联动关系来解决 Github 上 composer 资源包的依赖问题,里面讲的是发布项目到 Composer 的中央仓库,Composer 跟 Maven 是类似的两款产品,所以在刚开始的时候,我以为上传到 Maven 中央仓库的操作,同样可以通过简单几句命令和 Github 的几项配置就能够实现,但是后来发现大错特错。

准备

首先我们需要跟这两个网站打交道:

Github 大家应该都知道,我们首先把要发布的项目放到 Github 上,这应该也很容易理解,那么 sonatype 又是一个什么鬼呢?

光看 sonatype 估计一脸蒙蔽,因为我刚看到的时候也是二脸蒙蔽。但是去人家官网 https://www.sonatype.com/上一看,大名鼎鼎的 Nexus 在人家的产品列表上摆着呢...

https://oss.sonatype.org 顾名思义,就是 sonatype 专门的仓库地址了。

干活

好了,废话不多说了,我们在 https://issues.sonatype.org 先注册登录,然后进入后台。

不出意外应该长这个样子:

1.pic_hd.jpg

最上面的导航栏左边数起最后一个有一个“Create”按钮,点它,然后按照下图进行填写:

2.pic.jpg

然后点击"Create"

提交成功的话,我们可以在 issues->Create Recently 页面里面找到刚刚创建的 issue(虽然我也不明白它为什么要全部称之为 issue)。我这里的视图如下:

3.pic_hd.jpg

等待

好,接下来就是等待 sonatype 的审核通过,然后审核通过后一般还要再过三天左右才能够在 Maven 的中央仓库去下载它,嗯就是这样。

我过了一天就收到了审核通过的通知:

1.pic.jpg

上面的意思就是,我现在可以把项目包上传到他们的中央仓库并给其他人下载了。

上传

接下来我们要进入 https://oss.sonatype.org 这个网站,利用自己先前注册的账号登录即可。其首页如下:

2.pic.jpg

然后我们点击"Staging upload"这个按钮。

在它的页面如下填写信息:

3.pic.jpg

其实就是上传项目的 pom 文件跟 jar 包,然后写一下项目的介绍即可。

这里要注意一件事情:

项目的 version 不能够是 SNAPSHOT,如果为 SNAPSHOT 那么会提示上传失败。

上传成功后,我们点击"Staging Repositories",一切顺利的话就能够找到我们刚刚上传的项目

4.pic_hd.jpg

好,做到这一步我们就成功的把项目上传到 Maven 的私服了,但是这个时候还不能够在 Maven 的中央仓库搜索到我们的项目,还需要 release 它:

release

5.pic_hd.jpg

做完这一步,再过几个小时,我们应该就能够在 Maven 的中央仓库搜索到自己上传的项目了。

不过,在此之前,还要回到 https://issues.sonatype.org 上面,告诉那个管理员我们的第一次提交已经成功了,毕竟人家那么客气的说让我们通知他一下:

6.pic.jpg

报错

可能因为时差的关系(我们白天而人家是黑夜),我等了一天才等到对方的答复,很不幸的是,报错了:

1.pic.jpg

经过检查,发现,上传到 maven 中央仓库的项目要求具备以下条件:

  • pom 文件要求具备:

    • description 描述信息
    • licenses 证书信息
    • developers 开发人员信息
    • scm 版本管理信息
    • distributionManagement 分发构件的信息
  • 项目本身要求具备:

    • javadoc 文档信息
    • sources-jar 包

修改 pom

pom.xml 中添加以下信息:

<build>
  <plugins>
	 ......
	<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>2.10.3</version>
    <executions>
      <execution>
        <id>attach-javadocs</id>
        <goals>
          <goal>jar</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-source-plugin</artifactId>
    <executions>
      <execution>
        <id>attach-sources</id>
        <goals>
          <goal>jar-no-fork</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
  </plugins>
</build>

<licenses>
  <license>
	<name>GNU General Public License v3.0</name>
	<url>http://www.gnu.org/licenses/agpl-3.0.html</url>
	<distribution>repo</distribution>
	<comments>A socket manager</comments>
  </license>
</licenses>

<developers>
  <developer>
	<name>liumapp</name>
	<url>http://www.liumapp.com</url>
	<email>liumapp.com@gmail.com</email>
  </developer>
</developers>

<scm>
  <connection>scm:git:https://github.com/liumapp/DNSQueen.git</connection>
  <developerConnection>scm:git:https://github.com/liumapp/DNSQueen.git</developerConnection>
  <url>https://github.com/liumapp/DNSQueen</url>
  <tag>v${project.version}</tag>
</scm>

<distributionManagement>
  <snapshotRepository>
	<id>ossrh</id>
	<url>https://oss.sonatype.org/content/repositories/snapshots</url>
  </snapshotRepository>
  <repository>
	<id>ossrh</id>
	<name>Maven Central Staging Repository</name>
	<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
  </repository>
</distributionManagement>

重新编译项目。

重新上传

如图,将缺少的 jar 包上传:

2.pic.jpg

这次上传成功后,没有马上通知管理员,我自己先去看看有没有错误,结果一看,又有错误...

3.pic.jpg

这个问题百思不得其解,我尝试从上传项目上入手,改用 sonatype 提供的 maven 插件来上传项目试试。

另一种上传方式

首先我们需要确保本地有 gpg 这个工具,然后再利用它来上传,这些步骤占用的文章篇幅比较长,所以我将它单独写了一篇博文出来:gpg 的安装使用

使用这个工具上传项目之后,Repositories 下面没有再报任何错误。所以,sonatype 上面的 upload 功能就是一个坑呀.....

然后再一次的通知管理员,等待...

成功的通知:

6.pic.jpg

成功截图

1.pic.jpg

更新版本

更新的方法很简单,写好新版本的代码后,打一个 Github 的 tag,再把 pom.xml 的 version 变一下,再使用跟上传同样的命令:

mvn deploy -Dmaven.test.skip=true  -e

就可以了。

9.pic.jpg

  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    186 引用 • 318 回帖 • 303 关注
  • GitHub

    GitHub 于 2008 年上线,目前,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。正因为这些功能所提供的便利,又经过长期的积累,GitHub 的用户活跃度很高,在开源世界里享有深远的声望,并形成了社交化编程文化(Social Coding)。

    209 引用 • 2031 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...