1. 程式人生 > >Maven基礎與私服搭建

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私服搭建是非常有必要的,好處不多說,誰用誰知道!!本週學習進度緩慢,下週儘量加快進度,小逗逼要休假一天了,週一見..