之前有篇文章介紹如何在遠(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)境侧甫,具體使用可以百度之或參考阮大神的博客
配置環(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ì)