最近在研发一套 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 先注册登录,然后进入后台。
不出意外应该长这个样子:
最上面的导航栏左边数起最后一个有一个“Create”按钮,点它,然后按照下图进行填写:
然后点击"Create"
提交成功的话,我们可以在 issues->Create Recently 页面里面找到刚刚创建的 issue(虽然我也不明白它为什么要全部称之为 issue)。我这里的视图如下:
等待
好,接下来就是等待 sonatype 的审核通过,然后审核通过后一般还要再过三天左右才能够在 Maven 的中央仓库去下载它,嗯就是这样。
我过了一天就收到了审核通过的通知:
上面的意思就是,我现在可以把项目包上传到他们的中央仓库并给其他人下载了。
上传
接下来我们要进入 https://oss.sonatype.org 这个网站,利用自己先前注册的账号登录即可。其首页如下:
然后我们点击"Staging upload"这个按钮。
在它的页面如下填写信息:
其实就是上传项目的 pom 文件跟 jar 包,然后写一下项目的介绍即可。
这里要注意一件事情:
项目的 version 不能够是 SNAPSHOT,如果为 SNAPSHOT 那么会提示上传失败。
上传成功后,我们点击"Staging Repositories",一切顺利的话就能够找到我们刚刚上传的项目
好,做到这一步我们就成功的把项目上传到 Maven 的私服了,但是这个时候还不能够在 Maven 的中央仓库搜索到我们的项目,还需要 release 它:
release
做完这一步,再过几个小时,我们应该就能够在 Maven 的中央仓库搜索到自己上传的项目了。
不过,在此之前,还要回到 https://issues.sonatype.org 上面,告诉那个管理员我们的第一次提交已经成功了,毕竟人家那么客气的说让我们通知他一下:
报错
可能因为时差的关系(我们白天而人家是黑夜),我等了一天才等到对方的答复,很不幸的是,报错了:
经过检查,发现,上传到 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 包上传:
这次上传成功后,没有马上通知管理员,我自己先去看看有没有错误,结果一看,又有错误...
这个问题百思不得其解,我尝试从上传项目上入手,改用 sonatype 提供的 maven 插件来上传项目试试。
另一种上传方式
首先我们需要确保本地有 gpg 这个工具,然后再利用它来上传,这些步骤占用的文章篇幅比较长,所以我将它单独写了一篇博文出来:gpg 的安装使用
使用这个工具上传项目之后,Repositories 下面没有再报任何错误。所以,sonatype 上面的 upload 功能就是一个坑呀.....
然后再一次的通知管理员,等待...
成功的通知:
成功截图
更新版本
更新的方法很简单,写好新版本的代码后,打一个 Github 的 tag,再把 pom.xml 的 version 变一下,再使用跟上传同样的命令:
mvn deploy -Dmaven.test.skip=true -e
就可以了。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于