不開(kāi)源的情況下上傳jar包至maven倉(cāng)庫(kù)

之前有篇文章介紹如何在遠(yuǎn)程倉(cāng)庫(kù)中導(dǎo)入so:http://www.reibang.com/p/c65697f6bc36

文中提到上傳maven倉(cāng)庫(kù)比較繁瑣且需要開(kāi)源改含。最近在看到友盟統(tǒng)計(jì)在不開(kāi)源的情況下也能用gradle遠(yuǎn)程導(dǎo)入jar包惰赋,于是明確了的確有種方式可以不開(kāi)源并上傳待榔。

在具體了解怎么操作前,我猜想大致結(jié)構(gòu)應(yīng)該是上傳一個(gè)假的源碼框架,在其中引入真的jar包,最后一起打出maven上的jar包,也就是說(shuō)通過(guò)引用jar的形式繞過(guò)需要開(kāi)源的設(shè)定纵顾。結(jié)果證明了我太naive了

仔細(xì)學(xué)習(xí)友盟的上傳git和jar后,我發(fā)現(xiàn)自己反而一頭霧水了栋盹,因?yàn)椴粌H與我的猜想相去甚遠(yuǎn)施逾,而且上傳的東西和結(jié)果產(chǎn)出的jar根本牛頭不對(duì)馬嘴。首先maven對(duì)上傳的開(kāi)源有比較明確的要求,需要一個(gè)git地址汉额,pom文件定義打包沪饺。且倉(cāng)庫(kù)中可以瀏覽的jar包都有個(gè)source包,而友盟的source卻是空的闷愤。綜合上述情況我明白了肯定有直接上傳jar包至maven的方式整葡,而不是我之前認(rèn)為必須要maven通過(guò)pom文件打包得出jar

通過(guò)廣泛的查閱資料,在官網(wǎng)的requirements后我找到之前我得出結(jié)論的佐證

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.

翻譯一下就是如果因?yàn)槟承┰虮热缭S可問(wèn)題或這是個(gè)Scala工程讥脐,使得你不能提供源碼包(source.jar)或JAVA文檔包(javadoc.jar)遭居,請(qǐng)生成一個(gè)假的只包含README的源碼包或JAVA文檔包來(lái)通過(guò)上傳檢查

bingo,官方明確的指出可以上傳不開(kāi)源的jar,那么具體怎么操作呢旬渠?終于在官方文檔中找到了這一篇指導(dǎo)俱萍,簡(jiǎn)單來(lái)說(shuō)就是生成jar包并簽名后和其他資源一起打成一個(gè)bundle.jar,最后通過(guò)上傳bundle.jar來(lái)發(fā)布出去告丢。

來(lái)枪蘑,讓我們重頭開(kāi)始,讓上傳不再?gòu)?fù)雜a狻T榔摹!

第一步 注冊(cè)帳號(hào)

上傳首先你要有個(gè)賬戶(hù)颅湘,這個(gè)賬戶(hù)就是Sonatype帳號(hào)话侧,大膽的去注冊(cè)就好了。

注冊(cè)地址:https://issues.sonatype.org/secure/Signup!default.jspa

第二步 提交申請(qǐng)

提交申請(qǐng)獲取上傳資格

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

具體填寫(xiě)很簡(jiǎn)單闯参,頁(yè)面上也有簡(jiǎn)單的說(shuō)明瞻鹏。因?yàn)閙aven對(duì)上傳有比較嚴(yán)格的審核,所以上傳前會(huì)有人工審核鹿寨。審核的主要對(duì)象是groupId新博,一般為相應(yīng)的域名。出于安全的考慮脚草,maven不希望你占用別人的域名來(lái)發(fā)布一些包以免使用者產(chǎn)生混淆赫悄。比如我使用com.google.pay去發(fā)布一個(gè)支付sdk,恐怕大多數(shù)人都會(huì)誤認(rèn)為是官方發(fā)布的玩讳。所以審核員會(huì)針對(duì)groupId做一些限制涩蜘,比如groupId是一個(gè)私有域名,審核員會(huì)comment你熏纯,希望你證明下你的所有權(quán),一般建議你使用域名相同的郵箱給他發(fā)一個(gè)郵件粤策,或直接建議你使用com.github.{項(xiàng)目名} 作為你的groupId.如何選groupId樟澜,官網(wǎng)也有個(gè)簡(jiǎn)單的視頻指導(dǎo),點(diǎn)開(kāi)后有股濃濃的咖喱味哦~~~

提交以后需要等待審核,一般周期為1~2天秩贰,因?yàn)閷徍藛T在米國(guó)所以一般東八區(qū)時(shí)間晚上10點(diǎn)人家才會(huì)處理申請(qǐng)霹俺,所以白天申請(qǐng)的需要等到第二天。

第三步 打包并簽名

漫長(zhǎng)的等待后毒费,終于審核通過(guò)了丙唧,你得到了以下提示:

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

到這一步就萬(wàn)事俱備,只欠jar包了觅玻。到目前為止的步驟和其他博客的并無(wú)區(qū)別想际,但是鑒于我們需要上傳的是非開(kāi)源的jar。所以以下步驟比較特殊溪厘。

中間插一下簽名的說(shuō)明先

GPG簽名

定義神馬的可以去百度下胡本,這里我只簡(jiǎn)單的說(shuō)明,簽名作用是防止jar被篡改畸悬。

所以我們需要下載一個(gè)GPG的環(huán)境侧甫,具體使用可以百度之或參考阮大神的博客

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

配置環(huán)境并能運(yùn)行g(shù)pg命令,生成自己的簽名并上傳成功后我們才能開(kāi)始下一步蹋宦。

打包

假設(shè)我們的groupId就叫com.example.zachary,artifact叫uploadmvn披粟,版本為1.0.0。那么首先我們會(huì)有一個(gè)uploadmvn.jar冷冗,然后我們重命名為uploadmvn-1.0.0.jar僻爽,然后新建一個(gè)README文件,文件為空或隨便寫(xiě)點(diǎn)什么都行贾惦,把README文件打成一個(gè)jar包胸梆,名稱(chēng)為uploadmvn-1.0.0-sources.jar,同理生成uploadmvn-1.0.0-javadoc.jar

那么我們現(xiàn)在有如下三個(gè)包了

uploadmvn-1.0.0.jar

uploadmvn-1.0.0-sources.jar

uploadmvn-1.0.0-javadoc.jar

然后我們需要編輯一個(gè)pom文件

名稱(chēng)為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文件,拷貝過(guò)來(lái)簡(jiǎn)書(shū)編輯器不識(shí)別须板,如果錯(cuò)誤見(jiàn)諒

以上pom文件中需要著重填寫(xiě)的是groupId,artifactId,version碰镜,不能有錯(cuò)誤

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

最后scm節(jié)點(diǎn)中填寫(xiě)一個(gè)git地址绪颖,和代碼沒(méi)關(guān)系也行,我填了一個(gè)空項(xiàng)目的地址甜奄。

完成這一步后我們有四個(gè)文件分別為:

uploadmvn-1.0.0.jar

uploadmvn-1.0.0.pom

uploadmvn-1.0.0-sources.jar

uploadmvn-1.0.0-javadoc.jar

然后依次運(yùn)行g(shù)pg命令簽名這四個(gè)文件柠横,以pom文件為例

gpg -ab uploadmvn-1.0.0.pom

然后會(huì)得到對(duì)應(yīng)的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

接下來(lái)需要把八個(gè)文件打成一個(gè)jar,命令示例:

jar -cvf bundle.jar uploadmvn*

如果得到一個(gè)bundle.jar那就成功了?涡帧k狗铡!

我們離最后的勝利只差一步了烟阐。

上傳

打開(kāi)網(wǎng)址:https://oss.sonatype.org/#welcome

還記得之前注冊(cè)的Sonatype帳號(hào)么搬俊?這里需要使用這個(gè)帳號(hào)登錄紊扬。登錄成功后左側(cè)會(huì)有build promotion選項(xiàng)卡,下面有一個(gè)Staging Upload選項(xiàng)

點(diǎn)擊Staging Upload后唉擂,在Upload Mode后有個(gè)下拉選框餐屎,選擇Artifact bundle,然后select bundle,找到之前生成的bundle.jar,點(diǎn)擊上傳按鈕玩祟。上傳后會(huì)在上圖的Staging Repositories中有顯示腹缩。點(diǎn)擊Staging Repositories,在列表找到自己上傳的相應(yīng)條目空扎,如果狀態(tài)是close那么表示你上傳成功藏鹊,如果不是,列表下面有activity顯示有什么錯(cuò)誤勺卢,解決后重新上傳就好了伙判。如果狀態(tài)已經(jīng)是close,那么你需要選中自己對(duì)應(yīng)的條目點(diǎn)擊列表上方的release按鈕黑忱。由于是第一次上傳宴抚,所以當(dāng)你release完畢后需要回到之前申請(qǐng)上傳資格的地方也就是提交Issue的頁(yè)面comment審核員你已經(jīng)release了,告訴他這個(gè)issue已經(jīng)完成了甫煞。等待一段時(shí)間后菇曲,你就可以在search.maven.org上找到自己上傳的jar了。

當(dāng)看到自己jar已經(jīng)上傳到maven庫(kù)后抚吠,是不是成就感滿(mǎn)滿(mǎn)呢常潮?以后別的開(kāi)發(fā)者只需要在gradle一行代碼就能引用你的jar了

compile ?"com.example.zachary:uploadmvn:1.0.0"

過(guò)程較費(fèi)時(shí)和繁瑣,耐心點(diǎn)就好.參考了比較多的資料楷力,盡量列一下好了喊式。有些東西概念都沒(méi)有足夠的篇幅去介紹,有興趣的可以看參考資料里的鏈接萧朝。在這里拜一下各位大神~~

參考資料

1.http://central.sonatype.org/pages/manual-staging-bundle-creation-and-deployment.html?官方的一個(gè)上傳bundle.jar的文檔

2.http://central.sonatype.org/pages/requirements.html?也是官方的一個(gè)上傳要求文檔岔留,上傳前建議讀一下

3.http://www.trinea.cn/dev-tools/upload-java-jar-or-android-aar-to-maven-center-repository/? ? trinea的介紹比較詳細(xì),圖片較多很直觀(guān)

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介紹检柬,很詳細(xì)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末献联,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子何址,更是在濱河造成了極大的恐慌里逆,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件用爪,死亡現(xiàn)場(chǎng)離奇詭異原押,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)项钮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)班眯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)希停,“玉大人烁巫,你說(shuō)我怎么就攤上這事署隘。” “怎么了亚隙?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,187評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵磁餐,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我阿弃,道長(zhǎng)诊霹,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,264評(píng)論 1 292
  • 正文 為了忘掉前任渣淳,我火速辦了婚禮脾还,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘入愧。我一直安慰自己鄙漏,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布棺蛛。 她就那樣靜靜地躺著怔蚌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪旁赊。 梳的紋絲不亂的頭發(fā)上桦踊,一...
    開(kāi)封第一講書(shū)人閱讀 51,231評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音终畅,去河邊找鬼籍胯。 笑死,一個(gè)胖子當(dāng)著我的面吹牛离福,可吹牛的內(nèi)容都是我干的杖狼。 我是一名探鬼主播,決...
    沈念sama閱讀 40,116評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼术徊,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼本刽!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起赠涮,我...
    開(kāi)封第一講書(shū)人閱讀 38,945評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤子寓,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后笋除,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體斜友,經(jīng)...
    沈念sama閱讀 45,367評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評(píng)論 2 333
  • 正文 我和宋清朗相戀三年垃它,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鲜屏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烹看。...
    茶點(diǎn)故事閱讀 39,754評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖洛史,靈堂內(nèi)的尸體忽然破棺而出惯殊,到底是詐尸還是另有隱情,我是刑警寧澤也殖,帶...
    沈念sama閱讀 35,458評(píng)論 5 344
  • 正文 年R本政府宣布土思,位于F島的核電站,受9級(jí)特大地震影響忆嗜,放射性物質(zhì)發(fā)生泄漏己儒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評(píng)論 3 327
  • 文/蒙蒙 一捆毫、第九天 我趴在偏房一處隱蔽的房頂上張望闪湾。 院中可真熱鬧,春花似錦绩卤、人聲如沸途样。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,692評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)娘纷。三九已至,卻和暖如春跋炕,著一層夾襖步出監(jiān)牢的瞬間赖晶,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,842評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工辐烂, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留遏插,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,797評(píng)論 2 369
  • 正文 我出身青樓纠修,卻偏偏與公主長(zhǎng)得像胳嘲,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子扣草,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理了牛,服務(wù)發(fā)現(xiàn),斷路器辰妙,智...
    卡卡羅2017閱讀 134,652評(píng)論 18 139
  • 太長(zhǎng)不讀篇 在 issues tracker 上注冊(cè) 創(chuàng)建 issues 配置 build.gradle gpg ...
    lambeta閱讀 4,693評(píng)論 0 1
  • 之前IJPay Jar是上傳到JitPack,但是有很多同學(xué)反饋說(shuō)Jar無(wú)法下載鹰祸。為了響應(yīng)群眾的號(hào)召,這次需要向中...
    Javen205閱讀 1,450評(píng)論 0 1
  • 6月29日計(jì)劃 早晨6:00起床密浑,6:20跑步蛙婴。7:45送女兒上學(xué),8:00吃早餐尔破,9:00到劉星公司取宣言?xún)?cè)街图,9...
    zengkai1198閱讀 118評(píng)論 0 0
  • 最初接觸小說(shuō)的時(shí)候是二零零五年浇衬,開(kāi)始接觸小說(shuō)。尤其是校園文學(xué)餐济,看的一本小說(shuō)是饒雪漫的《左耳》耘擂。至今想起吧啦被汽車(chē)壓...
    洛漾熙_0d2a閱讀 2,330評(píng)論 1 3