不开源的情况下上传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介绍,很详细

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,719评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,337评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,887评论 0 324
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,488评论 1 266
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,313评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,284评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,672评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,346评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,644评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,700评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,457评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,316评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,706评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,261评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,648评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,859评论 2 335

推荐阅读更多精彩内容