不开源的情况下上传jar包至maven仓库

之前有篇文章介绍如何在远程仓库中导入so:http://www.jianshu.com/p/c65697f6bc36

文中提到上传maven仓库比较繁琐且需要开源。最近在看到友盟统计在不开源的情况下也能用gradle远程导入jar包,于是明确了的确有种方式可以不开源并上传。

在具体了解怎么操作前,我猜想大致结构应该是上传一个假的源码框架,在其中引入真的jar包,最后一起打出maven上的jar包,也就是说通过引用jar的形式绕过需要开源的设定。结果证明了我太naive了

仔细学习友盟的上传git和jar后,我发现自己反而一头雾水了,因为不仅与我的猜想相去甚远,而且上传的东西和结果产出的jar根本牛头不对马嘴。首先maven对上传的开源有比较明确的要求,需要一个git地址,pom文件定义打包。且仓库中可以浏览的jar包都有个source包,而友盟的source却是空的。综合上述情况我明白了肯定有直接上传jar包至maven的方式,而不是我之前认为必须要maven通过pom文件打包得出jar

通过广泛的查阅资料,在官网的requirements后我找到之前我得出结论的佐证

If, for some reason (for example, license issue or it’s a Scala project), you can not provide -sources.jar or -javadoc.jar , please make fake -sources.jar or -javadoc.jar with simple README inside to pass the checking.

翻译一下就是如果因为某些原因比如许可问题或这是个Scala工程,使得你不能提供源码包(source.jar)或JAVA文档包(javadoc.jar),请生成一个假的只包含README的源码包或JAVA文档包来通过上传检查

bingo,官方明确的指出可以上传不开源的jar,那么具体怎么操作呢?终于在官方文档中找到了这一篇指导,简单来说就是生成jar包并签名后和其他资源一起打成一个bundle.jar,最后通过上传bundle.jar来发布出去。

来,让我们重头开始,让上传不再复杂!!!

第一步 注册帐号

上传首先你要有个账户,这个账户就是Sonatype帐号,大胆的去注册就好了。

注册地址:https://issues.sonatype.org/secure/Signup!default.jspa

第二步 提交申请

提交申请获取上传资格

Issue 地址:https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134

具体填写很简单,页面上也有简单的说明。因为maven对上传有比较严格的审核,所以上传前会有人工审核。审核的主要对象是groupId,一般为相应的域名。出于安全的考虑,maven不希望你占用别人的域名来发布一些包以免使用者产生混淆。比如我使用com.google.pay去发布一个支付sdk,恐怕大多数人都会误认为是官方发布的。所以审核员会针对groupId做一些限制,比如groupId是一个私有域名,审核员会comment你,希望你证明下你的所有权,一般建议你使用域名相同的邮箱给他发一个邮件,或直接建议你使用com.github.{项目名} 作为你的groupId.如何选groupId,官网也有个简单的视频指导,点开后有股浓浓的咖喱味哦~~~

提交以后需要等待审核,一般周期为1~2天,因为审核员在米国所以一般东八区时间晚上10点人家才会处理申请,所以白天申请的需要等到第二天。

第三步 打包并签名

漫长的等待后,终于审核通过了,你得到了以下提示:

Configuration has been prepared, now you can:

Deploy snapshot artifacts into repository  https://oss.sonatype.org/content/repositories/snapshots

 Deploy release artifacts into the staging repository https://oss.sonatype.org/service/local/staging/deploy/maven2

Promote staged artifacts into repository ‘Releases’

Download snapshot and release artifacts from group https://oss.sonatype.org/content/groups/public

Download snapshot, release and staged artifacts from staging group https://oss.sonatype.org/content/groups/staging

please comment on this ticket when you promoted your first release, thanks

到这一步就万事俱备,只欠jar包了。到目前为止的步骤和其他博客的并无区别,但是鉴于我们需要上传的是非开源的jar。所以以下步骤比较特殊。

中间插一下签名的说明先

GPG签名

定义神马的可以去百度下,这里我只简单的说明,签名作用是防止jar被篡改。

所以我们需要下载一个GPG的环境,具体使用可以百度之或参考阮大神的博客

http://www.ruanyifeng.com/blog/2013/07/gpg.html

配置环境并能运行gpg命令,生成自己的签名并上传成功后我们才能开始下一步。

打包

假设我们的groupId就叫com.example.zachary,artifact叫uploadmvn,版本为1.0.0。那么首先我们会有一个uploadmvn.jar,然后我们重命名为uploadmvn-1.0.0.jar,然后新建一个README文件,文件为空或随便写点什么都行,把README文件打成一个jar包,名称为uploadmvn-1.0.0-sources.jar,同理生成uploadmvn-1.0.0-javadoc.jar

那么我们现在有如下三个包了

uploadmvn-1.0.0.jar

uploadmvn-1.0.0-sources.jar

uploadmvn-1.0.0-javadoc.jar

然后我们需要编辑一个pom文件

名称为uploadmvn-1.0.0.pom:

<project xmlns=”http://maven.apache.org/POM/4.0.0″ xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>

<modelVersion>4.0.0</modelVersion>

<groupId>com.example.zachary</groupId>

<artifactId>uploadmvn</artifactId>

<version>1.0.0</version>

<packaging>jar</packaging>

<name>whatever</name>

<description>your description</description>

<url>your website url</url>

<licenses>

     <license>

         <name>your license,fake one will work too</name>

         <url>http://www.fake.is.ok.too</url>

    <license>

</licenses>

<scm>

<url>git@github.com:exampleproject/example-git.git</url>

<connection>scm:git:git@github.com:exampleproject/example-git.git</connection>

<developerConnection>scm:git:git@github.com:exampleproject/example-git.git</developerConnection>

</scm>

<develops>

<develop>

 <id>whatever id</id>

 <name>whatever name</name>

<organization>your web site</organization>

</develop>

</develops>

</project>

ps:纯手打pom文件,拷贝过来简书编辑器不识别,如果错误见谅

以上pom文件中需要着重填写的是groupId,artifactId,version,不能有错误

其次是packaging要填jar,如果你上传jar那就填aar。

最后scm节点中填写一个git地址,和代码没关系也行,我填了一个空项目的地址。

完成这一步后我们有四个文件分别为:

uploadmvn-1.0.0.jar

uploadmvn-1.0.0.pom

uploadmvn-1.0.0-sources.jar

uploadmvn-1.0.0-javadoc.jar

然后依次运行gpg命令签名这四个文件,以pom文件为例

gpg -ab uploadmvn-1.0.0.pom

然后会得到对应的asc文件

最后文件列表为

uploadmvn-1.0.0.jar

uploadmvn-1.0.0.jar.asc

uploadmvn-1.0.0.pom

uploadmvn-1.0.0.pom.asc

uploadmvn-1.0.0-sources.jar

uploadmvn-1.0.0-sources.jar.asc

uploadmvn-1.0.0-javadoc.jar

uploadmvn-1.0.0-javadoc.jar.asc

接下来需要把八个文件打成一个jar,命令示例:

jar -cvf bundle.jar uploadmvn*

如果得到一个bundle.jar那就成功了!!!

我们离最后的胜利只差一步了。

上传

打开网址:https://oss.sonatype.org/#welcome

还记得之前注册的Sonatype帐号么?这里需要使用这个帐号登录。登录成功后左侧会有build promotion选项卡,下面有一个Staging Upload选项

点击Staging Upload后,在Upload Mode后有个下拉选框,选择Artifact bundle,然后select bundle,找到之前生成的bundle.jar,点击上传按钮。上传后会在上图的Staging Repositories中有显示。点击Staging Repositories,在列表找到自己上传的相应条目,如果状态是close那么表示你上传成功,如果不是,列表下面有activity显示有什么错误,解决后重新上传就好了。如果状态已经是close,那么你需要选中自己对应的条目点击列表上方的release按钮。由于是第一次上传,所以当你release完毕后需要回到之前申请上传资格的地方也就是提交Issue的页面comment审核员你已经release了,告诉他这个issue已经完成了。等待一段时间后,你就可以在search.maven.org上找到自己上传的jar了。

当看到自己jar已经上传到maven库后,是不是成就感满满呢?以后别的开发者只需要在gradle一行代码就能引用你的jar了

compile  “com.example.zachary:uploadmvn:1.0.0”

过程较费时和繁琐,耐心点就好.参考了比较多的资料,尽量列一下好了。有些东西概念都没有足够的篇幅去介绍,有兴趣的可以看参考资料里的链接。在这里拜一下各位大神~~

参考资料

1.http://central.sonatype.org/pages/manual-staging-bundle-creation-and-deployment.html 官方的一个上传bundle.jar的文档

2.http://central.sonatype.org/pages/requirements.html 也是官方的一个上传要求文档,上传前建议读一下

3.http://www.trinea.cn/dev-tools/upload-java-jar-or-android-aar-to-maven-center-repository/    trinea的介绍比较详细,图片较多很直观

4.http://my.oschina.net/huangyong/blog/226738?p=2&temp=1467012996079#blog-comments-list  步骤清晰

5.http://www.ruanyifeng.com/blog/2013/07/gpg.html 阮一峰的GPG介绍,很详细

    原文作者:manjusaka0128
    原文地址: https://www.jianshu.com/p/b26efa87ce4a
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞