發布套件
引用套件
要把編譯好的 jar/aar 套件,上傳到套件管理中心,方便別人下載使用:
dependencies {
compile 'com.github.yongjhih:RetroFacebook:1.0.0'
}
那麼你要就上到一個 maven 套件伺服器。目前知名的伺服器中心有三家:
- mavenCentral
- jcenter
- jitpack
mavenCentral 發布套件
由 sonatype 組織所維護, 最早的一家。 必須要開源才能被收錄。最嚴苛的一家。
申請方式,首先,你必須要有一個開源專案。
註冊 sonatype 帳號後,發 ticket ,在 ticket 內容寫你的開源網址,通常是 github repository 網址,如:https://github.com/yongjhih/RetroFacebook ,這樣你就會拿到 com.github.yongjhih
的 group 。以後你都可以往這個群組裡面丟 jar/aar 。
如果是公司行號要申請,就必須在 ticket 內容寫明你是域名的擁有者,例如:com.infstory
,這樣你才能拿到 com.infstory
Group。
mavenCentral 發布指南:
~/.gradle/gradle.properties 設定 mavenCentral 帳密與 gpg key
在你的專案安裝 https://github.com/chrisbanes/gradle-mvn-push
設定專案套件資訊 gradle.properties:
VERSION_NAME=0.9.2-SNAPSHOT
VERSION_CODE=92
GROUP=com.github.chrisbanes.actionbarpulltorefresh
POM_DESCRIPTION=A modern implementation of the pull-to-refresh for Android
POM_URL=https://github.com/chrisbanes/ActionBar-PullToRefresh
POM_SCM_URL=https://github.com/chrisbanes/ActionBar-PullToRefresh
POM_SCM_CONNECTION=scm:[email protected]:chrisbanes/ActionBar-PullToRefresh.git
POM_SCM_DEV_CONNECTION=scm:[email protected]:chrisbanes/ActionBar-PullToRefresh.git
POM_LICENCE_NAME=The Apache Software License, Version 2.0
POM_LICENCE_URL=http://www.apache.org/licenses/LICENSE-2.0.txt
POM_LICENCE_DIST=repo
POM_DEVELOPER_ID=chrisbanes
POM_DEVELOPER_NAME=Chris Banes
上傳套件:
./gradlew uploadArchives
上傳後,會先進到 stage 暫存區,做掃描行為後,你進到網頁後台確定發布。不過通常半個到一個工作天才能夠真正進到 mavenCentral。
jcenter
由 bintray 公司所維護。原則上也是需要開源。jcenter 會鏡像 mavenCentral 。而目前 jcenter 是 android studio 預設的套件中心。加上目前由於網頁設計的比較便民,所以大多已經改由 jcenter 發布了。當然很多其他系統還是只有 mavenCentral 所以 jcenter 也提供同步到 mavenCentral ,不過你要給它 OSSRH 的帳密就是了,當然 jcenter 也表明不會儲存你的帳密。
安裝 https://github.com/novoda/bintray-release
上傳套件:
./gradlew bintrayUpload
去 bintray.com 後台一鍵申請發布到 jcenter ,通常一天內就會審核通過。(未來這部份應該透過上傳程式就直接提出申請,這樣省事多了)
jitpack
大約是 2015 年初的時候成立的。最大的特點是,直接支援 github/bitbucket repository 。所以不用特別申請套件中心帳號。因為不是你去放套件,而是它自己來拉你的源碼來編譯 jar/aar。
jitpack 引用套件
引用方 build.gradle:
repositories {
// ...
maven { url "https://jitpack.io" }
}
dependencies {
compile 'com.github.{user}:{repo}:{version}'
}
jitpack 發布套件
因為是引用時編譯,不需要自己編譯上傳發布,只要安裝配置好基本 script 提交到 github repo ,就沒事了。
在 module 內 build.gradle 加入:
buildscript {
repositories {
jcenter()
}
dependencies {
// ...
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'
}
}
apply plugin: 'com.github.dcendents.android-maven'
apply from: 'android-javadoc.gradle'
以及新增 android-javadoc.gradle:
task sourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
}
task javadoc(type: Javadoc) {
failOnError false
source = android.sourceSets.main.java.sourceFiles
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}
artifacts {
archives sourcesJar
archives javadocJar
}
如果你引用的了太多 jitpack 上面的套件,會需要很長的時間等待 jitpack 的編譯時間。故筆者作為一個函式庫貢獻者,盡可能還是採取 jitpack 與 jcenter 並行。甚者,如有閒暇會讓 jcenter 同步到上游 mavenCentral 。
p.s. jitpack 未來或許營利除了私有套件之外,可能可以提供付費服務,如報表等。javadoc 生成塞廣告。結合 travis-ci, cycle-ci 。同步 mavenCentral/jcenter
線上 javadoc
- javadoc.io for maven central,
http://javadoc.io/doc/{GROUP}{.SUBGROUP}/{ARTIFACT}/{VERSION}
- jitpack,
https://jitpack.io/{GROUP}{/SUBGROUP}/{ARTIFACT}/{VERSION}/javadoc/