文檔當前狀態:**beta0.5**
* [x] 選題收集:2017/11/20
* [x] 初稿整理:
* [ ] 補充校對:
* [ ] 入庫存檔:
---
[TOC]
---
### **一.Nexus私服——簡介**
#### Nexus介紹
Nexus是一個強大的Maven倉庫管理器,它極大地簡化了本地內部倉庫的維護和外部倉庫的訪問。
如果使用了公共的Maven倉庫服務器,可以從Maven中央倉庫下載所需要的構件(Artifact),但這通常不是一個好的做法。
正常做法是在本地架設一個Maven倉庫服務器,即利用Nexus私服可以只在一個地方就能夠完全控制訪問和部署在你所維護倉庫中的每個Artifact。
* Nexus在代理遠程倉庫的同時維護本地倉庫,以降低中央倉庫的負荷,節省外網帶寬和時間,Nexus私服就可以滿足這樣的需要。
* Nexus是一套“開箱即用”的系統不需要數據庫,它使用文件系統加Lucene來組織數據。
* Nexus使用ExtJS來開發界面,利用Restlet來提供完整的REST APIs,通過m2eclipse與Eclipse集成使用。
* Nexus支持WebDAV與LDAP安全身份認證。
* Nexus還提供了強大的倉庫管理功能,構件搜索功能,它基于REST,友好的UI是一個extjs的REST客戶端,它占用較少的內存,基于簡單文件系統而非數據庫。
#### 為什么要構建Nexus私服?
如果沒有Nexus私服,我們所需的所有構件都需要通過maven的中央倉庫和第三方的Maven倉庫下載到本地,而一個團隊中的所有人都重復的從maven倉庫下載構件無疑加大了倉庫的負載和浪費了外網帶寬,如果網速慢的話,還會影響項目的進程。很多情況下項目的開發都是在內網進行的,連接不到maven倉庫怎么辦呢?開發的公共構件怎么讓其它項目使用?這個時候我們不得不為自己的團隊搭建屬于自己的maven私服,這樣既節省了網絡帶寬也會加速項目搭建的進程,當然前提條件就是你的私服中擁有項目所需的所有構件。
#### 在本地構建nexus私服的好處
1)加速構建;
2)節省帶寬;
3)節省中央maven倉庫的帶寬;
4)穩定(應付一旦中央服務器出問題的情況);
5)控制和審計;
6)能夠部署第三方構件;
7)可以建立本地內部倉庫;
8)可以建立公共倉庫
這些優點使得Nexus日趨成為最流行的Maven倉庫管理器。
先看下這張圖應該大家就明白了:
[](https://blog.52itstyle.com/usr/uploads/2017/06/334573725.png)
這樣就相當于在我們本地的局域網搭建了一個類似中央倉庫的服務器,我們開始將中央倉庫的一些資料下載到私服務器上,然后平時我們的maven項目就是直接訪問局域網內的私服即可,既節省了網絡帶寬也會加速項目搭建的進程。
此外,在局域網內搭建Maven私服,除了能從私服下載已緩存的jar包,還能將內部通用模塊發布在私服上供其他同事使用。對內部項目部署很有幫助。這樣對我們開發來說,對公司來說都是非常好的選擇。下邊簡單說一下Nexus私服的搭建與簡單使用。
### **二.Nexus私服——部署安裝**
#### **2.1 環境準備**
這里以windows10平臺為例,linux、mac平臺同樣支持。
整體步驟:準備環境、下載Nexus3、
>需求環境:jdk1.8、maven3.3.9(具體需求環境可以在官網可以看到,上述環境配置過程請自行百度)
##### **2.1.1:檢查 Java 安裝**
現在打開控制臺,執行下面的?`java`?命令。
| 操作系統 | 任務 | 命令 |
| --- | --- | --- |
| Windows | 打開命令控制臺 | `c:\> java -version` |
| Linux | 打開命令終端 | `$ java -version` |
| Mac | 打開終端 | `machine:~ joseph$ java -version` |
我們來驗證一下所有平臺上的輸出:
| 操作系統 | 輸出 |
| --- | --- |
| Windows | java version "1.6.0_21" Java(TM) SE Runtime Environment (build 1.6.0_21-b07) Java HotSpot(TM) Client VM (build 17.0-b17, mixed mode, sharing) |
| Linux | java version "1.6.0_21"Java(TM) SE Runtime Environment (build 1.6.0_21-b07) Java HotSpot(TM) Client VM (build 17.0-b17, mixed mode, sharing) |
| Mac | java version "1.6.0_21" Java(TM) SE Runtime Environment (build 1.6.0_21-b07) Java HotSpot(TM)64-Bit Server VM (build 17.0-b17, mixed mode, sharing) |
如果你沒有安裝 Java,從以下網址安裝 Java 軟件開發套件(SDK):[](http://www.oracle.com/technetwork/java/javase/downloads/index.html)[http://www.oracle.com/technetwork/java/javase/downloads/index.html](http://www.oracle.com/technetwork/java/javase/downloads/index.html)。我們假定你安裝的 Java 版本為1.6.0_21。
##### **2.1.2:設置 Java 環境**
設置?`JAVA_HOME`?環境變量,并指向你機器上的 Java 安裝目錄。例如:
| 操作系統 | 輸出 |
| --- | --- |
| Windows | Set the environment variable JAVA_HOME to?C:\Program Files\Java\jdk1.6.0_21 |
| Linux | `export JAVA_HOME=/usr/local/java-current` |
| Mac | `export JAVA_HOME=/Library/Java/Home` |
將 Java 編譯器地址添加到系統路徑中。
| 操作系統 | 輸出 |
| --- | --- |
| Windows | 將字符串“;C:\Program Files\Java\jdk1.6.0_21\bin”添加到系統變量“Path”的末尾 |
| Linux | export PATH=PATH:JAVA_HOME/bin/ |
| Mac | not required |
使用上面提到的?java -version?命令驗證 Java 安裝。
##### **2.1.3:下載 Maven 文件**
從以下網址下載 Maven 3.2.5:[](http://maven.apache.org/download.html)[http://maven.apache.org/download.html](http://maven.apache.org/download.html)
##### **2.1.4:解壓 Maven 文件**
解壓文件到你想要的位置來安裝 Maven 3.2.5,你會得到 apache-maven-3.2.5 子目錄。
| 操作系統 | 位置 (根據你的安裝位置而定) |
| --- | --- |
| Windows | `C:\Program Files\Apache Software Foundation\apache-maven-3.2.5` |
| Linux | `/usr/local/apache-maven` |
| Mac | `/usr/local/apache-maven` |
##### **2.1.5:設置 Maven 環境變量**
添加 M2_HOME、M2、MAVEN_OPTS 到環境變量中。
| 操作系統 | 輸出 |
| --- | --- |
| Windows | 使用系統屬性設置環境變量。M2_HOME=C:\Program Files\Apache Software Foundation\apache-maven-3.2.5 , M2=%M2_HOME%\bin ,MAVEN_OPTS=-Xms256m -Xmx512m |
| Linux | 打開命令終端設置環境變量。export M2_HOME=/usr/local/apache-maven/apache-maven-3.2.5,export M2=$M2_HOME/bin, export MAVEN_OPTS=-Xms256m -Xmx512m |
| Mac | 打開命令終端設置環境變量。export M2_HOME=/usr/local/apache-maven/apache-maven-3.2.5,export M2=$M2_HOME/bin,export MAVEN_OPTS=-Xms256m -Xmx512m |
##### **2.1.6:添加 Maven bin 目錄到系統路徑中**
現在添加 M2 變量到系統“Path”變量中
| 操作系統 | 輸出 |
| --- | --- |
| Windows | 添加字符串 “;%M2%” 到系統“Path”變量末尾 |
| Linux | export PATH=M2:PATH |
| Mac | export PATH=M2:PATH |
##### **2.1.7:驗證 Maven 安裝**
現在打開控制臺,執行以下?mvn?命令。
| 操作系統 | 輸出 | 命令 |
| --- | --- | --- |
| Windows | 打開命令控制臺 | `c:\> mvn --version` |
| Linux | 打開命令終端 | `$ mvn --version` |
| Mac | 打開終端 | `machine:~ joseph$ mvn --version` |
最后,驗證以上命令的輸出,應該是像下面這樣:
| 操作系統 | 輸出 |
| --- | --- |
| Windows | Apache Maven 3.2.5 (r801777; 2009-08-07 00:46:01+0530)Java version: 1.6.0_21Java home: C:\Program Files\Java\jdk1.6.0_21\jre |
| Linux | Apache Maven 3.2.5 (r801777; 2009-08-07 00:46:01+0530) Java version: 1.6.0_21 Java home: C:\Program Files\Java\jdk1.6.0_21\jre |
| Mac | Apache Maven 3.2.5 (r801777; 2009-08-07 00:46:01+0530) Java version: 1.6.0_21 Java home: C:\Program Files\Java\jdk1.6.0_21\jre |
恭喜!你完成了所有的設置,開始使用 Apache Maven 吧。
**環境檢驗**
maven:在cmd下出現如下:
~~~
C:\Users\hwj>**mvn --version**
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: E:\apache-maven-3.3.9\bin\..
Java version: 1.8.0_60, vendor: Oracle Corporation
Java home: E:\Program Files\Java\jdk1.8.0_60\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "dos"
~~~
jdk:在cmd下出現如下:
~~~
C:\Users\hwj>**java -version**
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
~~~
表示環境已經搭好了。
#### **2.2 Nexus3部署**
鏈接:[https://www.sonatype.com/download-oss-sonatype](https://www.sonatype.com/download-oss-sonatype)?
下載完了解壓后就是兩個文件夾:
>nexus-3.2.1-01、sonatype-work
在nexus-3.2.1-01?下的bin下有個nexus.exe,但是你就是死活打不開(閃退),那是因為打開方式不對。在nexus-3.2.1-01\etc下有個nexus-default.properties文件,打開里面修改其中application-port=8081為其他端口,8081這個端口比較搶手吧,經常被占用,這里我就**修改為8083**了,這個時候就可以來打開nexus.exe了。
正確的打開方式:在cmd中切換到nexus.exe所在目錄,然后敲入nexus.exe /run即可,例如我的就是C:\Users\hwj>E:\nexus\nexus-3.2.1-01\bin\nexus.exe /run
~~~
nexus.exe /run
~~~
之后等待一下看到,表示啟動成功了。
~~~
Started Sonatype Nexus OSS 3.2.1-01
~~~
此外,當然也可以作為一個Service運行,詳情看官網[service-windows](https://books.sonatype.com/nexus-book/3.0/reference/install.html#service-windows):
~~~
nexus.exe /install
~~~
在瀏覽器輸入localhost:8083即可看到此頁面(如果部署到服務器上,就是服務器的ip:8083)

默認的賬號admin,密碼admin123.
### **三.Nexus私服**
>倉庫管理這塊主要涉及:功能介紹、服務器緩存中央倉庫Maven、上傳更新私有類庫
這里假設你把 nexus 安裝在了本機,倉庫地址為 [http://localhost:8081/repository/test/](http://localhost:8081/repository/test/) 。如果把 nexus 安裝在了局域網服務器,基本類似,只是倉庫地址中的 localhost 改為局域網服務器 ip 。
? ? ? ?從狀態上來看nexus已經啟動起來了,Nexus啟動之后就可以在瀏覽器訪問類似 192.168.9.190:9999/nexus/ 地址,其中ip為當前服務器ip,端口Nexus默認為8081,可以在conf/nexus.properties文件中修改端口.進入web管理頁面后右上角登陸,Nexus默認的賬號密碼是admin:admin123,
#### **3.1 Nexus界面簡介**
使用默認的管理員admin/admin123登錄,進入管理界面:
[](https://xnstatic-1253397658.file.myqcloud.com/nexus02.png)
##### **3.1.1 用戶和角色**
可以點擊上面的“設置”圖標,在“設置”里可以添加用戶、角色,對接LDAP等的設置。
[](https://xnstatic-1253397658.file.myqcloud.com/nexus03.png)
[](https://xnstatic-1253397658.file.myqcloud.com/nexus04.png)
##### **3.1.2 Nexus搜索頁**
這個不需要登錄就可以訪問,用來查詢jar包。支持模糊查詢
[](https://xnstatic-1253397658.file.myqcloud.com/nexus07.png)
##### **3.1.3 Blob Stores**
文件存儲的地方,創建一個目錄的話,對應文件系統的一個目錄,可供倉庫上傳文件使用,如圖所示:
[](https://xnstatic-1253397658.file.myqcloud.com/nexus08.png)
##### **3.1.4 Nexus的調度任務**
默認安裝好之后是沒有索引和jar文件的,因為你要自己定義任務去執行。
Nexus提供了一系列可配置的調度任務來方便用戶管理系統。用戶可以設定這些任務運行的方式,例如每天、每周等。調度任務會在適當的時候在后臺運行。
要建立一個調度任務,單擊左邊導航菜單中的Tasks,點擊`Create Task`,然后選擇一個任務類型。
[](https://xnstatic-1253397658.file.myqcloud.com/nexus11.png)
以下幾種常用類型的調度任務:
* Execute script:執行自定義腳本
* Purge開頭:清理一些不使用的資源。
* Rebuild repository index:為倉庫重新編纂索引,從遠倉庫下載最新的索引。
* Rebuild Maven repository metadata:基于倉庫內容重新創建倉庫元數據文件,同時重新創建每個文件的校驗和md5與sha1。
* Remove snapshots from Maven repository:把快照刪了,這個是在穩定版發布后清除
比如我新建一個重構索引的任務,然后選擇aliyun倉庫,讓它把遠程索引取下來,手動執行。不過最好別這樣做,因為需要很大的硬盤空間。
最好是讓它自己去維護,請求一個依賴的時候如果私服沒有會自動去遠倉庫取的。
#### **3.3 倉庫Repository**
**重點來啦!重點來啦!重點來啦!**
現在點擊左側的repositories查看現有的倉庫列表.

##### **3.3.1 倉庫管理**
最核心的是倉庫管理
[](https://xnstatic-1253397658.file.myqcloud.com/nexus05.png)
默認的這幾個倉庫,先解釋一下:
1. **maven-central**:maven中央庫,默認從https://repo1.maven.org/maven2/拉取jar;
2. **maven-releases**:私庫發行版jar,初次安裝請將`Deployment policy`設置為`Allow redeploy`
3. **maven-snapshots**:私庫快照(調試版本)jar
4. **maven-public**:倉庫分組,把上面三個倉庫組合在一起對外提供服務,在本地maven基礎配置`settings.xml`中使用。
Nexus默認的倉庫類型有以下四種:
1. **group(倉庫組類型)**:又叫組倉庫,用于方便開發人員自己設定的倉庫;
2. **hosted(宿主類型)**:內部項目的發布倉庫(內部開發人員,發布上去存放的倉庫);
3. **proxy(代理類型)**:從遠程中央倉庫中尋找數據的倉庫(可以點擊對應的倉庫的Configuration頁簽下Remote Storage屬性的值即被代理的遠程倉庫的路徑);
4. **virtual(虛擬類型)**:虛擬倉庫(這個基本用不到,重點關注上面三個倉庫的使用);
Policy(策略): 表示該倉庫為發布(Release)版本倉庫還是快照(Snapshot)版本倉庫;
由于訪問中央倉庫有時候會比較慢,這里我添加一個阿里云的代理倉庫,然后優先級放到默認中央庫之前,, 阿里云的maven倉庫url為`http://maven.aliyun.com/nexus/content/groups/public`
[](https://xnstatic-1253397658.file.myqcloud.com/nexus09.png)
然后再public組里面講這個`aliyun-proxy`倉庫加入,排在`maven-central`之前即可。
[](https://xnstatic-1253397658.file.myqcloud.com/nexus10.png)
**Nexus倉庫分類的概念**
1)Maven可直接從宿主倉庫下載構件,也可以從代理倉庫下載構件,而代理倉庫間接的從遠程倉庫下載并緩存構件
2)為了方便,Maven可以從倉庫組下載構件,而倉庫組并沒有時間的內容(下圖中用虛線表示,它會轉向包含的宿主倉庫或者代理倉庫獲得實際構件的內容)
[](https://xnstatic-1253397658.file.myqcloud.com/nexus06.png)
###### **3.3.1.1 Proxy**
這里就是代理的意思,代理中央Maven倉庫,當PC訪問中央庫的時候,先通過Proxy下載到Nexus倉庫,然后再從Nexus倉庫下載到PC本地。
這樣的優勢只要其中一個人從中央庫下來了,以后大家都是從Nexus私服上進行下來,私服一般部署在內網,這樣大大節約的寬帶。
創建Proxy的具體步驟:
1. --點擊“Create Repositories”按鈕

2. --選擇要創建的類型

3. --填寫詳細信息
Name:就是為代理起個名字
Remote Storage: 代理的地址,Maven的地址為: https://repo1.maven.org/maven2/
Blob Store: 選擇代理下載包的存放路徑

###### **3.3.1.2 Hosted**
hosted 是宿主倉庫 ,是自己的私有庫地址,這個就是自己的。這個有 releases 和snapshots 兩種類型,你如果自己創建的時候,需要指定 ,一個是正式發布地址,一個是開發中地址。
Hosted是宿主機的意思,就是怎么把第三方的Jar放到私服上。
Hosted有三種方式,Releases、SNAPSHOT、Mixed
Releases: 一般是已經發布的Jar包
Snapshot: 未發布的版本
Mixed:混合的
Hosted的創建和Proxy是一致的,具體步驟和上面基本一致。如下:



**注意事項:**
Deployment Pollcy: 需要把策略改成“Allow redeploy”。

###### **3.3.1.3 Group**
group 管理組 ,組是Nexus一個強大的特性,它允許你在一個單獨的URL中組合多個倉庫。比如這里默認組合了:maven-central、maven-releases和maven-snapshots ,一般直接引用這個地址就好了。
#### **3.4 開啟遠程索引(鏡像中央maven)**
新搭建的neuxs環境只是一個空的倉庫,需要手動和遠程中心庫進行同步,nexus默認是關閉遠程索引下載,最重要的一件事情就是開啟遠程索引下載。登陸nexus系統,默認用戶名密碼為admin/admin123
* 點擊左邊Administration菜單下面的Repositories,找到右邊倉庫列表中的Apache Snapshots,Central,然后在configuration下把Download Remote Indexes修改為true?

* 倉庫上分別右鍵,選擇Repari Index,這樣Nexus就會去下載遠程的索引文件。?

這樣設置以后, Nexus會自動從遠程中央倉庫下載索引文件, 為了檢驗索引文件自動下載是否生效,可以卻換到Browse Index查看
**增加阿里云鏡像**(大部分情況下還是比較快)
~~~
Repositories –> Add –>ProxyRepository
阿里的maven鏡像:
http://maven.aliyun.com/nexus/content/groups/public/
Checksum Policy 可以改為ignore
~~~

Repositories –> Public Repositories?
將右側欄全部加入左側欄即可?

#### **3.5 上傳私有類庫**
假設我們有一個有關 android 通用工具類的公共庫 CommonUtils.jar 需要上傳到倉庫,供團隊成員使用。
##### **3.5.1 配置倉庫和類庫的相關信息**
[參考這里](http://zmywly8866.github.io/2016/01/05/android-private-maven-repository.html)配置倉庫和類庫的相關信息,在項目 gradle.properties 添加以下屬性
~~~
# maven local config
maven_local_url=http://localhost:8081/repository/test/
maven_local_username=admin
maven_local_password=admin123
# common utils
maven_pom_version=1.0.0
maven_pom_groupid=im.het
maven_pom_artifactId=commonutils
maven_pom_packaging=jar
maven_pom_description=android common utils
maven_pom_archives_file=libs/CommonUtils.jar
~~~
說明 :
* maven_local_url maven倉庫中相應repository的地址
* maven_local_username 上傳類庫到倉庫的用戶名
* maven_local_password 上傳類庫到倉庫的密碼
* maven_pom_version 要上傳的類庫的版本號
* maven_pom_groupid 類庫的分組標記,一般使用公司名或包名即可
* maven_pom_artifactId 類庫的名稱
* maven_pom_packaging 類庫的格式可以支持 jar ,aar , so 等
* maven_pom_description 類庫描述
* maven_pom_archives_file 類庫文件在項目中的位置(相對于 build.gradle)
##### **3.5.2 gradle新增上傳task**
在相應類庫所在的 module 的 build.gradle 增加上傳類庫的 task
~~~
apply plugin: 'maven'
uploadArchives {
repositories {
mavenDeployer {
repository(url: maven_local_url) {
authentication(userName:maven_local_username ,password: maven_local_password)
}
pom.project {
version maven_pom_version
artifactId maven_pom_artifactId
groupId maven_pom_groupid
packaging maven_pom_packaging
description maven_pom_description
}
}
}
}
artifacts {
archives file(maven_pom_archives_file)
}
~~~
說明 :
* artifacts 中可以指定要上傳的 jar 或 aar 的路徑,為統一配置都由 gradle.properties 的屬性 maven_pom_archives_file 指定
* 如果只需要上傳項目編譯時產生的 aar,artifacts 可以省略,因為 artifacts 默認就包含了編譯產生的 aar 或 apk
##### **3.5.3 執行上傳task**
添加task后,可以使用命令行或者GUI
運行上傳類庫的 task 即可把相應類庫上傳到倉庫
~~~
gradle uploadArchives
~~~
?在Android Studio的Gradle project插件中選中 對應 模塊運行uploadArchives任務就可以將該模塊的aar文件以 指定的版本部署到Nexus上,供其他項目引用.

如果上傳成功,一般可以在[這里](http://localhost:8081/#browse/browse/assets:test)看到相關類庫了。
下面是我們上傳類庫 commonutils 到 test repo 后的文件列表,可以看到其中有 aar 文件存在,這是因為 artifacts 中默認包含了編譯產生的 aar 文件 ,可以在這里刪除 aar 相關文件,因為我們只希望有 jar 的存在。

browse-repo-test.png
##### **3.5.4 更新類庫**
如果類庫需要更新版本,基本操作同上。
比如類庫 commonutils 有了新版本為 2.0.0 ,先修改 gradle.properties 配置如下
~~~
maven_pom_version=2.0.0
...
maven_pom_archives_file=libs/CommonUtils2.0.jar
~~~
再運行上傳類庫的 task 即可。
### **四.Android Studio使用Nexus私服**
#### **4.1 配置私服Url**
##### **4.1.1 單個項目配置私服**
在需要使用類庫的項目的 根build.gradle 文件里面加入以下即可在項目中使用 私服上的 類庫了。
~~~
allprojects {
repositories {
jcenter()
mavenLocal()
}
dependencies{
repositories {
maven {
url 'http://localhost:8081/repository/test/'
}
}
}
}
~~~
##### **4.1.2 所有項目配置私服**
但是架不住項目多,難不成每個都改一遍么?
自然是有省事的辦法,將下面這段Copy到名為`init.gradle`文件中,并保存到 `USER_HOME/.gradle/`文件夾下即可。
```
allprojects {
repositories {
def REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public/'
all { ArtifactRepository repo ->
if (repo instanceof MavenArtifactRepository && repo.url != null) {
def url = repo.url.toString()
if (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
remove repo
}
}
}
maven {
url REPOSITORY_URL
}
}
}
```
`init.gradle`文件其實是Gradle的`初始化腳本`(Initialization Scripts),也是運行時的全局配置。
更詳細的介紹請參閱 [http://gradle.org/docs/current/userguide/init_scripts.html](http://gradle.org/docs/current/userguide/init_scripts.html)
如果公司暫時還不能提供私服,可以使用一些大公司的。
目前已知、可用nexus私服:
* 阿里云:http://maven.aliyun.com/nexus/content/groups/public/
#### **4.2 項目模塊依賴**
模塊的build.gradle中,常規寫法:
~~~
dependencies {
compile 'im.het:commonutils:1.2.1'
}
~~~
gradle 支持依賴庫動態版本,如果你想每次從 maven 倉庫中拉取最新的庫,可以這樣下面這樣:
~~~
//不推薦,每次編譯都會去服務器,檢查新版
//接口可能會變更,編譯報錯
dependencies {
compile 'im.het:commonutils:1.+'
}
~~~
也可以這樣配置
~~~
dependencies {
compile 'im.het:commonutils:+'
}
~~~
用”+”通配符來匹配最新的符合要求的版本,這樣做的好處是如果 maven 倉庫上有新版本庫了,不用修改類庫的依賴配置版本,gradle 編譯的時候會自動拉取最新版本。但這樣也會帶來兩個麻煩:
* 有可能新版本類庫的接口改了,導致編譯失敗,這個時候需要修改代碼做接口適配
* 會使 gradle 構建速度變慢,因為每次 gradle 編譯完整的項目,都會去 maven 倉庫上嘗試拉取最新版本的類庫,這樣會拖慢編譯速度,尤其在網絡差的時候,不過我們這里的倉庫一般是在本機或局域網,拉取最新版本并下載的這點時間一般很快可以忽略。
### **常見問題列表**
**使用私有倉庫解決依賴后,我想拷貝其中的 jar 包,怎么找?**
在工程下的 External Libraries 可以看到相應的類庫,這些類庫默認是放在 gradle 緩存目錄的 (在 linux 環境中,一般是在 ~/.gradle/caches 下面 )。 可以右鍵點擊 Reavel in Finder 打開所在文件的目錄,拷貝其中類庫即可。
### **常見倉庫地址**
* jitpack:https://jitpack.io
* mavenCentral:http://repo1.maven.org/maven2
* jcenter:http://jcenter.bintray.com
* google:http://nexusrepo/repository/Google
* google: https://maven.google.com
### **參考資料**
* [maven私服nexus3.x環境配置](https://www.xncoding.com/2017/09/02/tool/nexus.html)
* [Windows下搭建基于Nexus的Android Maven私服(一)](http://blog.csdn.net/huweijian5/article/details/56670569)
* [Windows下搭建基于Nexus的Android Maven私服(二)](http://blog.csdn.net/huweijian5/article/details/56834199)
* [利用Nexus搭建Maven私服(包含aar上傳)](http://cdn2.jianshu.io/p/e5ae84aebab9)
* [Android 搭建maven私服管理類庫](http://www.jianshu.com/p/1b48489eb23a)
* [Android 項目部署之Nexus私服搭建和應用](http://blog.csdn.net/l2show/article/details/48653949)
* [Android Studio上使用Nexus搭建Maven私服并上傳JCenter](http://www.jianshu.com/p/207c3a467167)
* [使用 Android Studio + Nexus 搭建 Maven 私服(二)](http://www.jianshu.com/p/a8aac4d95214)
* [使用nexus搭建maven私服————開啟遠程索引](http://blog.h5min.cn/u011704394/article/details/54730044)
- 0-發現
- AndroidInterview-Q-A
- Android能讓你少走彎路的干貨整理
- LearningNotes
- temp
- temp11
- 部分地址
- 0-待辦任務
- 待補充列表
- 0-未分類
- AndroidView事件分發與滑動沖突處理
- Spannable
- 事件分發機制詳解
- 1-Java
- 1-Java-01基礎
- 未歸檔
- 你應該知道的JDK知識
- 集合框架
- 1-Java-04合集
- Java之旅0
- Java之旅
- JAVA之旅01
- JAVA之旅02
- JAVA之旅03
- JAVA之旅04
- JAVA之旅05
- JAVA之旅06
- JAVA之旅07
- JAVA之旅08
- JAVA之旅09
- java之旅1
- JAVA之旅10
- JAVA之旅11
- JAVA之旅12
- JAVA之旅13
- JAVA之旅14
- JAVA之旅15
- JAVA之旅16
- JAVA之旅17
- JAVA之旅18
- JAVA之旅19
- java之旅2
- JAVA之旅20
- JAVA之旅21
- JAVA之旅22
- JAVA之旅23
- JAVA之旅24
- JAVA之旅25
- JAVA之旅26
- JAVA之旅27
- JAVA之旅28
- JAVA之旅29
- java之旅3
- JAVA之旅30
- JAVA之旅31
- JAVA之旅32
- JAVA之旅33
- JAVA之旅34
- JAVA之旅35
- 1-Java-05辨析
- HashMapArrayMap
- Java8新特性
- Java8接口默認方法
- 圖解HashMap(1)
- 圖解HashMap(2)
- 2-Android
- 2-Android-1-基礎
- View繪制流程
- 事件分發
- AndroidView的事件分發機制和滑動沖突解決
- 自定義View基礎
- 1-安卓自定義View基礎-坐標系
- 2-安卓自定義View基礎-角度弧度
- 3-安卓自定義View基礎-顏色
- 自定義View進階
- 1-安卓自定義View進階-分類和流程
- 10-安卓自定義View進階-Matrix詳解
- 11-安卓自定義View進階-MatrixCamera
- 12-安卓自定義View進階-事件分發機制原理
- 13-安卓自定義View進階-事件分發機制詳解
- 14-安卓自定義View進階-MotionEvent詳解
- 15-安卓自定義View進階-特殊形狀控件事件處理方案
- 16-安卓自定義View進階-多點觸控詳解
- 17-安卓自定義View進階-手勢檢測GestureDetector
- 2-安卓自定義View進階-繪制基本圖形
- 3-安卓自定義View進階-畫布操作
- 4-安卓自定義View進階-圖片文字
- 5-安卓自定義View進階-Path基本操作
- 6-安卓自定義View進階-貝塞爾曲線
- 7-安卓自定義View進階-Path完結篇偽
- 8-安卓自定義View進階-Path玩出花樣PathMeasure
- 9-安卓自定義View進階-Matrix原理
- 通用類介紹
- Application
- 2-Android-2-使用
- 2-Android-02控件
- ViewGroup
- ConstraintLayout
- CoordinatorLayout
- 2-Android-03三方使用
- Dagger2
- Dagger2圖文完全教程
- Dagger2最清晰的使用教程
- Dagger2讓你愛不釋手-終結篇
- Dagger2讓你愛不釋手-重點概念講解、融合篇
- dagger2讓你愛不釋手:基礎依賴注入框架篇
- 閱讀筆記
- Glide
- Google推薦的圖片加載庫Glide:最新版使用指南(含新特性)
- rxjava
- 這可能是最好的RxJava2.x入門教程完結版
- 這可能是最好的RxJava2.x入門教程(一)
- 這可能是最好的RxJava2.x入門教程(三)
- 這可能是最好的RxJava2.x入門教程(二)
- 這可能是最好的RxJava2.x入門教程(五)
- 這可能是最好的RxJava2.x入門教程(四)
- 2-Android-3-優化
- 優化概況
- 各種優化
- Android端秒開優化
- apk大小優化
- 內存分析
- 混淆
- 2-Android-4-工具
- adb命令
- 一鍵分析Android的BugReport
- 版本控制
- git
- git章節簡述
- 2-Android-5-源碼
- HandlerThread 源碼分析
- IntentService的使用和源碼分析
- 2-Android-9-辨析
- LRU算法
- 什么是Bitmap
- 常見圖片壓縮方式
- 3-Kotlin
- Kotlin使用筆記1-草稿
- Kotlin使用筆記2
- kotlin特性草稿
- Kotlin草稿-Delegation
- Kotlin草稿-Field
- Kotlin草稿-object
- 4-JavaScript
- 5-Python
- 6-Other
- Git
- Gradle
- Android中ProGuard配置和總結
- gradle使用筆記
- Nexus私服搭建
- 編譯提速最佳實踐
- 7-設計模式與架構
- 組件化
- 組件化探索(OKR)
- 1-參考列表
- 2-1-組件化概述
- 2-2-gradle配置
- 2-3-代碼編寫
- 2-4-常見問題
- 2-9-值得一讀
- 8-數據結構與算法
- 0臨時文件
- 漢諾塔
- 8-數據-1數據結構
- HashMap
- HashMap、Hashtable、HashSet 和 ConcurrentHashMap 的比較
- 遲到一年HashMap解讀
- 8-數據-2算法
- 1個就夠了
- Java常用排序算法(必須掌握的8大排序算法)
- 常用排序算法總結(性能+代碼)
- 必須知道的八大種排序算法(java實現)
- 9-職業
- 閱讀
- 書單
- 面試
- 面試-01-java
- Java面試題全集駱昊(上)
- Java面試題全集駱昊(下)
- Java面試題全集駱昊(中)
- 面試-02-android
- 40道Android面試題
- 面試-03-開源源碼
- Android圖片加載框架最全解析(二),從源碼的角度理解Glide的執行流程
- 面試-07-設計模式
- 面試-08-算法
- 面試-09-其他
- SUMMARY
- 版權說明
- temp111