此工程包含了與這篇文章相應(yīng)的demo實(shí)例同窘。方便你馬上上手锈至。
(初版文檔搞隐,文檔內(nèi)容需要隨時(shí)更改和補(bǔ)充)
引言 公司需要有自己的library倉(cāng)庫(kù)驹愚,避免重復(fù)造車輪子,方便需要時(shí)隨時(shí)使用劣纲。一個(gè)方法就是建立自己的私有repository逢捺。本文檔教你如下內(nèi)容:
- 如何搭建Nexus Maven私服
- 在Android Studio中上傳私有l(wèi)ibrary
- 使用私有l(wèi)ibrary
Nexus下載和安裝(如果已經(jīng)安裝好服務(wù)器,省略此步驟) 本地倉(cāng)庫(kù)需要有自己的倉(cāng)庫(kù)管理工具癞季。Sonatype Nexus和Artifactory都是不錯(cuò)的選擇劫瞳。本文選擇Sonatype Nexus。下載地址為: https://www.sonatype.com/download-oss-sonatype
請(qǐng)根據(jù)你的操作系統(tǒng)進(jìn)行選擇绷柒。下載解壓后柠新,你可以看到如下的文件夾:
在Console中(windows下為cmd),鍵入:
Windows:
將nexus.exe設(shè)置成以管理員身份運(yùn)行
cd {nexus解壓后目錄/nexus-版本號(hào)/bin/}
nexus.exe /install
nexus.exe /start
Mac:
cd {nexus解壓后目錄/nexus-版本號(hào)/bin/}
./nexus run
如果有疑問(wèn)請(qǐng)參考: http://books.sonatype.com/nexus-book/reference3/install.html#service-windows
打開(kāi)私服管理器 在瀏覽器中辉巡,輸入http://localhost:8081
,如果一切順利蕊退,你可以看到Nexus Repository Manager管理頁(yè)面郊楣。
Tips:你也可以使用花生殼等工具憔恳,將其部署到外網(wǎng)中去(通過(guò)內(nèi)網(wǎng)映射),這樣你就可以用外網(wǎng)地址訪問(wèn)私服服務(wù)器了净蚤。
創(chuàng)建私有倉(cāng)庫(kù) 私服管理頁(yè)面中钥组,你首先會(huì)進(jìn)入guest賬戶頁(yè)面,這個(gè)賬戶你還不能新建repository今瀑。這里點(diǎn)擊右上角的sign in
輸入管理員密碼
默認(rèn)為admin,密碼admin123程梦。登陸后,點(diǎn)擊設(shè)置按鈕
橘荠,點(diǎn)擊Repository-Repository-Create Repository
選擇maven2(hosted)類型屿附。當(dāng)然,你也可以選擇別的類型的repository哥童。這里選擇maven2是為了和android studio的maven插件配合使用挺份,也是推薦的選擇。
輸入repository的名字贮懈。Deployment policy選擇Allow redeploy匀泊,否則library的提交就只能進(jìn)行一次,不能重復(fù)提交朵你。點(diǎn)擊Create repository各聘。
至此私有Maven庫(kù)就創(chuàng)建完畢了。
創(chuàng)建私有倉(cāng)庫(kù) Library的創(chuàng)建是為了解決一個(gè)實(shí)際問(wèn)題抡医,可以完全是自己新建的項(xiàng)目躲因,可以來(lái)自局域網(wǎng)的svn,也可以是在github上委托的項(xiàng)目魂拦。
Tips: 如何github上的項(xiàng)目創(chuàng)建毛仪,請(qǐng)看 https://www.londonappdeveloper.com/how-to-use-git-hub-with-android-studio/。
- 首先芯勘,我們?cè)贏ndroid Studio中新建一個(gè)project箱靴,點(diǎn)擊File-New-New Project。
- 新建一個(gè)Module荷愕,選擇Android Library衡怀,指定Library Name,點(diǎn)擊Finish安疗。
- 根據(jù)項(xiàng)目需要抛杨,編寫(xiě)Library Module。對(duì)于公司編寫(xiě)的library而言荐类,這里應(yīng)該執(zhí)行版本管理怖现,利用svn或者git等等。
Tips:library完成了某一milestone,或者進(jìn)行了一遍迭代時(shí)屈嗤,才應(yīng)該上傳代碼到maven庫(kù)潘拨。請(qǐng)注意區(qū)分這兩種不同的提交。
- 為了gradle文件的模塊性饶号,新建nexus_maven.gradle文件铁追,輸入如下代碼:
apply plugin: 'maven'
task androidJavadocs(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
classifier = 'javadoc'
from androidJavadocs.destinationDir
}
task androidSourcesJar(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.srcDirs
}
artifacts {
archives androidSourcesJar
archives androidJavadocsJar
}
uploadArchives {
repositories {
mavenDeployer {
repository(url: "YourMavenRepositoryUrl") {
authentication(userName: "admin", password: "admin123")
}
pom.project {
name 'YourProjectName'
version '1.0.0'
artifactId 'yourartifactid'
groupId 'com.company'
packaging 'aar'
description 'Your Project Description'
}
}
}
}
這段代碼首先引用maven插件;然后定義了2個(gè)任務(wù):androidSourcesJar
和androidJavadocsJar
茫船,這兩個(gè)任務(wù)分別用于對(duì)Java sources打包和Java doc進(jìn)行打包琅束;接著我們對(duì)uploadArchives.repositories閉包進(jìn)行一些配置,包括倉(cāng)庫(kù)的url地址算谈,比如http://localhost:8081/repository/android-lib涩禀,上傳所需的用戶名和密碼,以及pom屬性濒生。
- 在module的build.gradle文件最后添加
apply from: './nexus_maven.gradle'
這樣埋泵,代碼就可以準(zhǔn)備上傳到Maven私服了。
上傳本地代碼到Maven庫(kù)
點(diǎn)擊Android Studio右側(cè)的Gradle projects罪治。雙擊uploadArchives上傳代碼丽声。在Run Console中,查看是否成功觉义。在Maven私服后臺(tái)中雁社,點(diǎn)擊Browse server contents-Browse-Components,你應(yīng)該可以看到剛才上傳的repository晒骇。
Tips:一般而言霉撵,maven庫(kù)的提交者維護(hù)著整個(gè)library的版本,不應(yīng)該由library的開(kāi)發(fā)者執(zhí)行洪囤,repository url用localhost應(yīng)該已經(jīng)足夠了徒坡。
在Android Studio工程中使用某一maven庫(kù)
- 打開(kāi)項(xiàng)目的根build.gradle文件,聲明需要使用的私服地址
allprojects {
repositories {
jcenter()
maven {
url 'http://localhost:8081/nexus/content/repositories/android-lib/'
}
}
}
- 在對(duì)應(yīng)模塊的build.gradle文件中瘤缩,添加項(xiàng)目依賴
compile '{groupId}:{artifactId}:{version}@{packaging}'
這里的組成和提交的pom.project的信息有關(guān)喇完,比如:
<dependency>
<groupId>com.vic</groupId>
<artifactId>myrecyclerview</artifactId>
<version>1.2.0</version>
<type>aar</type>
</dependency>
關(guān)于Gradle緩存
在執(zhí)行過(guò)一次Gradle的同步之后,Gradle會(huì)把對(duì)應(yīng)的Library的文件下載在本地剥啤,之后會(huì)直接使用锦溪。所以當(dāng)我們刪除舊的Library,用同樣的pom.project信息重新上傳一個(gè)新的Library時(shí)府怯,執(zhí)行Gradle同步刻诊,并不會(huì)更新最新的Library下來(lái)。這個(gè)時(shí)候可以到倉(cāng)庫(kù)存儲(chǔ)路徑下把對(duì)應(yīng)的Library文件刪除牺丙。 一般來(lái)說(shuō)则涯, Mac系統(tǒng)默認(rèn)下載到:/Users/(用戶名)/.gradle/caches/modules-2/files-2.1
Windows系統(tǒng)默認(rèn)下載到:C:\Users\(用戶名)\.gradle\caches\modules-2\files-2.1
參考文獻(xiàn)
1 用AndroidStudio發(fā)布Libs到Bintray jCenter
http://www.cnblogs.com/jacksBlogs/p/5622948.html
2 巧用 GitHub 創(chuàng)建自己的私人 Maven 倉(cāng)庫(kù),及一些開(kāi)發(fā)Library的建議
http://www.reibang.com/p/d2fae8c7d93f
3 使用 Android Studio + Nexus 搭建 Maven 私服 http://www.reibang.com/p/f815a05c627e
http://www.reibang.com/p/a8aac4d95214
4 Nexus Repository Manager 3.2 Documentation http://books.sonatype.com/nexus-book/reference3/install.html#service-windows
5 Android Studio發(fā)布項(xiàng)目到Maven倉(cāng)庫(kù) http://blog.csdn.net/h_zhang/article/details/51558800
6 在Android Studio中發(fā)布Library到j(luò)Center公共倉(cāng)庫(kù) https://yangbo.tech/2015/10/19/distribute-android-library-to-jcetner/
7 擁抱 Android Studio 之四:Maven 倉(cāng)庫(kù)使用與私有倉(cāng)庫(kù)搭建 http://blog.bugtags.com/2016/01/27/embrace-android-studio-maven-deploy/#簡(jiǎn)介