之前有篇文章介紹如何在遠程倉庫中導(dǎo)入so:http://www.itdecent.cn/p/c65697f6bc36
文中提到上傳maven倉庫比較繁瑣且需要開源。最近在看到友盟統(tǒng)計在不開源的情況下也能用gradle遠程導(dǎo)入jar包,于是明確了的確有種方式可以不開源并上傳。
在具體了解怎么操作前,我猜想大致結(jié)構(gòu)應(yīng)該是上傳一個假的源碼框架,在其中引入真的jar包,最后一起打出maven上的jar包,也就是說通過引用jar的形式繞過需要開源的設(shè)定。結(jié)果證明了我太naive了
仔細學(xué)習(xí)友盟的上傳git和jar后,我發(fā)現(xiàn)自己反而一頭霧水了,因為不僅與我的猜想相去甚遠,而且上傳的東西和結(jié)果產(chǎn)出的jar根本牛頭不對馬嘴。首先maven對上傳的開源有比較明確的要求,需要一個git地址,pom文件定義打包。且倉庫中可以瀏覽的jar包都有個source包,而友盟的source卻是空的。綜合上述情況我明白了肯定有直接上傳jar包至maven的方式,而不是我之前認為必須要maven通過pom文件打包得出jar
通過廣泛的查閱資料,在官網(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.
翻譯一下就是如果因為某些原因比如許可問題或這是個Scala工程,使得你不能提供源碼包(source.jar)或JAVA文檔包(javadoc.jar),請生成一個假的只包含README的源碼包或JAVA文檔包來通過上傳檢查
bingo,官方明確的指出可以上傳不開源的jar,那么具體怎么操作呢?終于在官方文檔中找到了這一篇指導(dǎo),簡單來說就是生成jar包并簽名后和其他資源一起打成一個bundle.jar,最后通過上傳bundle.jar來發(fā)布出去。
來,讓我們重頭開始,讓上傳不再復(fù)雜?。?!
第一步 注冊帳號
上傳首先你要有個賬戶,這個賬戶就是Sonatype帳號,大膽的去注冊就好了。
第二步 提交申請
提交申請獲取上傳資格
Issue 地址:https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134
具體填寫很簡單,頁面上也有簡單的說明。因為maven對上傳有比較嚴格的審核,所以上傳前會有人工審核。審核的主要對象是groupId,一般為相應(yīng)的域名。出于安全的考慮,maven不希望你占用別人的域名來發(fā)布一些包以免使用者產(chǎn)生混淆。比如我使用com.google.pay去發(fā)布一個支付sdk,恐怕大多數(shù)人都會誤認為是官方發(fā)布的。所以審核員會針對groupId做一些限制,比如groupId是一個私有域名,審核員會comment你,希望你證明下你的所有權(quán),一般建議你使用域名相同的郵箱給他發(fā)一個郵件,或直接建議你使用com.github.{項目名} 作為你的groupId.如何選groupId,官網(wǎng)也有個簡單的視頻指導(dǎo),點開后有股濃濃的咖喱味哦~~~
提交以后需要等待審核,一般周期為1~2天,因為審核員在米國所以一般東八區(qū)時間晚上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包了。到目前為止的步驟和其他博客的并無區(qū)別,但是鑒于我們需要上傳的是非開源的jar。所以以下步驟比較特殊。
中間插一下簽名的說明先
GPG簽名
定義神馬的可以去百度下,這里我只簡單的說明,簽名作用是防止jar被篡改。
所以我們需要下載一個GPG的環(huán)境,具體使用可以百度之或參考阮大神的博客
配置環(huán)境并能運行g(shù)pg命令,生成自己的簽名并上傳成功后我們才能開始下一步。
打包
假設(shè)我們的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
那么我們現(xiàn)在有如下三個包了
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節(jié)點中填寫一個git地址,和代碼沒關(guān)系也行,我填了一個空項目的地址。
完成這一步后我們有四個文件分別為:
uploadmvn-1.0.0.jar
uploadmvn-1.0.0.pom
uploadmvn-1.0.0-sources.jar
uploadmvn-1.0.0-javadoc.jar
然后依次運行g(shù)pg命令簽名這四個文件,以pom文件為例
gpg -ab uploadmvn-1.0.0.pom
然后會得到對應(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
接下來需要把八個文件打成一個jar,命令示例:
jar -cvf bundle.jar uploadmvn*
如果得到一個bundle.jar那就成功了?。?!
我們離最后的勝利只差一步了。
上傳
打開網(wǎng)址:https://oss.sonatype.org/#welcome
還記得之前注冊的Sonatype帳號么?這里需要使用這個帳號登錄。登錄成功后左側(cè)會有build promotion選項卡,下面有一個Staging Upload選項
點擊Staging Upload后,在Upload Mode后有個下拉選框,選擇Artifact bundle,然后select bundle,找到之前生成的bundle.jar,點擊上傳按鈕。上傳后會在上圖的Staging Repositories中有顯示。點擊Staging Repositories,在列表找到自己上傳的相應(yīng)條目,如果狀態(tài)是close那么表示你上傳成功,如果不是,列表下面有activity顯示有什么錯誤,解決后重新上傳就好了。如果狀態(tài)已經(jīng)是close,那么你需要選中自己對應(yīng)的條目點擊列表上方的release按鈕。由于是第一次上傳,所以當你release完畢后需要回到之前申請上傳資格的地方也就是提交Issue的頁面comment審核員你已經(jīng)release了,告訴他這個issue已經(jīng)完成了。等待一段時間后,你就可以在search.maven.org上找到自己上傳的jar了。
當看到自己jar已經(jīng)上傳到maven庫后,是不是成就感滿滿呢?以后別的開發(fā)者只需要在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介紹,很詳細