Maven基礎與私服搭建
Blog誕生記
Android studio構建專案有時候build.gradld構建緩慢,嚴重影響了開發心情,這僅是次要因素,最重要的是leader為了考慮團隊發展,建議搭建Maven私服,把專案模組化,按照module各自維護,把module push到maven私服,後續開發將依賴搭建的maven私服來開發,服從leader要求,開始了maven學習之路,先了解了maven基礎知識,再搭建maven私服,測試zbar二維碼掃描上傳module和依賴私服module,便學編寫,blog就此誕生了..
Maven基礎知識
下載地址(注意JDK要求1.7+)
http://maven.apache .org/download.cgi
配置環境變數
校驗安裝maven環境搭建
cmd命令列輸入命令
mvn -v
Maven與HelloWorld
先來認識Maven專案的目錄層次結構
根據上圖結構目錄,先新建idea.analyzesystem.maven包,再分別在其下家新建HelloWorldHelper.java和HelloWorldTest.java類,在完成上述內容後開始編寫pom.xml檔案,pom.xml檔案的基本框架
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
</project>
編寫pom檔案首先呢專案定位
<groupId></groupId> // 專案包名
<artifactId></artifactId > // 模組名稱,建議使用專案名稱
<version></version> // 版本號
其次呢專案如果用了第三方包需要在pom裡面宣告,比如HelloWorld示例(程式碼下載連結在文末)用到了junit,需要在pom宣告如下(如果你專案有用到其他的包,直接參照下列程式碼結構編輯即可)
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
</dependencies>
最後把pom.xml檔案放置到src資料夾同級目錄,執行cmd命令列,切換到專案下面,執行命令
mvn compile
如果你是第一次執行該命令會看到如下圖效果(會下載很多包)
當你看到下圖效果表示編譯ok了
執行測試用例 mvn test 命令
專案編譯後會在src同級目錄預設生成一個target資料夾,target內部結構目錄如下
我們在執行mvn package命令生成jar包,build success之後再回到target目錄如下
Maven 核心知識
Clean與install命令
mvn clean // 刪除編譯生成的target資料夾
install命令
mvn install //把 mvn package 生成的jar包安裝到本地
根據以上只是進行了一次小實踐,編譯生成一個jar供一個工程呼叫,操作步湊如下
這裡簡單貼一下pom.xml檔案
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>idea.analyzesystem.maven2</groupId>
<artifactId>maven-simple2</artifactId>
<version>0.0.1SANPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
<dependency>
<groupId>idea.analyzesystem.maven</groupId>
<artifactId>maven-simple</artifactId>
<version>0.0.1SANPSHOT</version>
</dependency>
</dependencies>
</project>
自動構建目錄骨架(archetype外掛)
首先建立專案目錄,再進入命令提示符使用archetype命令(第一次執行會執行一些下載依賴)
mvn archetype:generate
在選擇好版本後,開始配置基本資訊。
以上是一次配置資訊完成自動構建,我們也可以通過一條命令直接配置完成構建。
mvn archetype:generate -DgroupId=xxx -DartifactId=xx -Dversion=xxx -Dpackage=xxx
Maven的座標與倉庫
Maven根據pom檔案配置的座標,現在本地查詢,如果找不到就回去中央倉庫查詢。
在Maven安裝的目錄下找到lib目錄下的maven-model-builder-3.3.9.jar,用壓縮工具開啟跟進目錄你會發現pom-4.0.0.xml,所有的pom檔案都繼承自它
根據瀏覽器預覽可以發現中央倉庫地址
https://repo.maven.apache.org/maven2/
https://search.maven.org/ //這裡同樣可以訪問,可以檢索出你想要的jar
天朝的網路壁壘,我們常常無法訪問國外伺服器,但是可以通過訪問映象達到目的,maven在天朝是有映象倉庫的,我們可以直接訪問國內映象倉庫,這樣訪問速度更快更穩定。那麼如何訪問國內映象倉庫呢?開啟安裝目錄下的conf目錄,找到settting.xml配置檔案,定位到如下圖位置
提供了一個預設配置映象示例,根據示例修改新增映象配置如下:
<mirrors>
<mirror>
<id>maven.net.cn</id>
<mirrorOf>central</mirrorOf>
<name>Central mirror in china</name>
<url>http://maven.net.cn/content/groups/public</url>
</mirror>
</mirrors>
這裡額外提供幾個映象配置(個人用lattern就不需要映象了)
<mirror>
<id>nexus-osc</id>
<mirrorOf>central</mirrorOf>
<name>Nexus osc</name>
<url>http://maven.oschina.net/content/groups/public/</url>
</mirror>
<mirror>
<id>osc_thirdparty</id>
<mirrorOf>thirdparty</mirrorOf>
<url>http://maven.oschina.net/content/repositories/thirdparty/</url>
</mirror>
<mirror>
<id>repo2</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo2.maven.org/maven2/</url>
</mirror>
新增上面的中央倉庫映象以後,訪問都直接訪問映象中央倉庫,而原中央倉庫將不再訪問。
根據座標從中央倉庫找到的jar等下載到本地倉庫,預設c盤目錄下,如下圖
跟進目錄就可以發現自己install的jar,如idea 之前install的helloworld相關的jar
這些檔案我們一般都不會放在c盤,都會自定義目錄存放,那麼如何更改倉庫位置呢?同樣離不開setting.xml
<localRepository>D:\workspace\maven\maven-repo</localRepository> //路徑
// 把setting.xml檔案拷貝一份到該目錄下
Maven外掛安裝就不多說了,對個人來說沒啥意思,下面來看看pom.xml的元素標籤
<project> <modeIVersion> <groupId> <artifactId> <packaging> <version>
//之前用過了這些標籤,這裡提一下version: "0.0.0" ,第一位表示大版本號,第二位表示分支版本號,第三位表示小版本號。
<name> //標籤指專案描述名稱
<url> //專案地址
<description> //專案描述
<developers> //開發人員資訊
........
<dependencies> //依賴列表
一個專案可能有多個依賴jar或者第三方工程,這裡使用pom就需要新增多個依賴項<dependency>
<scope> //依賴範圍 ,限定作用域
<option> //值:true false(預設) 設定依賴是否可選
<exclusions> //排除依賴傳遞列表 a依賴b依賴c ,a排除依賴c就只依賴b
<build> //構建
<plugins> //外掛列表 子標籤外掛<plugins>
<parent> //聚合子模組,可以一起編譯
<modules> //原理同上
依賴範圍、依賴衝突、聚合與繼承暫不做過多學習了,日後再說吧,如果你想了解可以上imooc上面搜maven相關視訊教程,基礎瞭解到此就好。
Nexus下載與安裝
下載地址
http://www.sonatype.com/download-oss-sonatype
安裝下一步就好,埠號個人用的預設配置8081,你可以修改適合的埠號(如果你是下載zip,需要自己配置環境變數相關的),安裝好以後瀏覽器開啟地址
http://localhost:8081/
使用預設登陸賬號admin,密碼:admin123
完成登陸後建立一個倉庫如下圖
完善上面資訊建立成功如下
這個路徑很重要,在後面會有提到,對於上面選擇maven2-(hosted)你有疑問,可以參考下面一篇blog
Nexus與Android Studio
上面體驗了一把Nexus,建立倉庫,現在需要通過Android Studio專案,找到module zbar二維碼掃描module,把他上傳到建立好的Idea裡面去,流程請參考下面部落格(做人不能太無恥了,勞動成果我不能隨意切去別人的哈)
補充兩點:
url路徑組成就是上面我截圖標出,build.gradle裡面的路徑也是指向這裡,有個誤區我看他blog裡面提到的是”xxx/xxx/xx-id”,本人測試栽進去了
命令執行在這裡
上傳ok以後再通過下面流程可以檢視
compile的組成
compile com.zbar.lib:zbar:1.0
小結
maven私服搭建是非常有必要的,好處不多說,誰用誰知道!!本週學習進度緩慢,下週儘量加快進度,小逗逼要休假一天了,週一見..