Maven就是這麼簡單

什麼是Maven

Maven是一個採用純Java編寫的開源項目管理工具, Maven採用了一種被稱之爲Project Object Model (POM)概念來管理項目,全部的項目配置信息都被定義在一個叫作POM.xml的文件中..html

Maven是一款跨平臺的項目管理工具,是一個開源的項目...java

Maven主要服務於基於Java平臺的項目構建、依賴管理和項目信息管理...web

POM怎麼理解呢???apache

  • 咱們使用Java是面向對象編程,對象就是咱們的類
  • 而Maven是面向項目,把咱們的項目看作成是一個對象來進行管理

爲何要使用Maven??

在沒有使用Maven以前,咱們的jar包是否是很是雜亂???看一下我存放jar包的地方編程

這裏寫圖片描述

在沒有學習Maven以前,我還想過把這些jar包一一整理出來,萬一硬盤壞了,那個人jar包又要去從新找了..並且因爲jar包版本的問題,已經吃過很多虧...這就須要大量時間去整理jar包了...瀏覽器

曾經想手動打jar包,結果Intellij idea好像不太支持這種功能??【我還沒找到】....因而只能依靠原生的jar 命令去打jar包了,過了一陣子,想從新打jar包的時候,又忘記命令了...很是苦惱...緩存

而咱們的Maven就很是好地解決了上面這兩種狀況了,固然了,Maven的功能並非只有這麼一丟丟,我只是舉了兩個小例子而已...隨着咱們的學習,你將會看到Maven的強大之處...tomcat

Maven能夠管理項目的整個聲明週期,包括清除、編譯,測試,報告、打包、部署等等。服務器

自動構建項目微信

  • 軟件開發: 可行性分析、需求分析、軟件設計、軟件開發、發佈、運維
  • 軟件構建: 軟件已經開發完畢,須要構建成一個產品進行發佈
    構建步驟:
  • 清除--> 編譯-->測試-->報告-->打包(jar\war)-->安裝-->部署到遠程 maven能夠經過一個命令實現自動構建軟件項目

Maven擁有「約定優於配置「這麼一個理念,也就是說,把一些規範約定下來,人們就這麼用!若是咱們事先約定好全部項目的目錄結構,標準開發過程(編譯,測試) , 全部人都遵循這個約定。軟件項目的管理就會變得簡單不少。好比:如何過馬路(紅燈停綠燈行),如何開門,關門等。

安裝Maven

去官網下載Maven軟件,解壓事後就算安裝完畢了...

配置環境變量

由於Maven是由Java編寫的,所以想要使用Maven,首先要配置Java的環境變量...

這裏寫圖片描述

這裏寫圖片描述

檢測安裝Maven是否成功,在控制檯上打上 mvn -version就好了...

這裏寫圖片描述

Maven目錄結構

這裏寫圖片描述

  • bin:含有mvn運行的腳本
  • boot:含有plexus-classworlds類加載器框架
  • conf:含有settings.xml配置文件
  • lib:含有Maven運行時所須要的java類庫
  • Settings.xml 中默認的用戶庫: ${user.home}/.m2/repository[經過maven下載的jar包都會存儲到指定的我的倉庫中]
  • Maven默認倉庫下載地址在: maven的lib目錄下maven-model-builder-3.0.4.jar的pom.xml中

在咱們Maven中,有本地倉庫這麼一個概念,咱們能夠在settings.xml配置文件中修改本地倉庫的位置,好比我把本地倉庫放到桌面上

這裏寫圖片描述

這裏寫圖片描述


IDEA下使用Maven


詳情可參照詳細的Maven教程---Idea環境下

值得追加的是:在修改web.xml路徑的時候,那篇博文並無給出絕對的路徑...這裏可能有些人不知道怎麼寫。我給出來參考

X:\Users\ozc\Desktop\zhongfucheng3\src\main\webapp\WEB-INF\web.xml

maven術語

在咱們上一篇中已經知道了在Intellij idea下是如何使用Maven的了,建立出來的目錄結構是這樣子的:

這裏寫圖片描述

上面的目錄結構就是Maven所謂的」約定「,咱們使用Maven來構建Java項目,都是這種目錄結構的...

接下來咱們來了解一下Mavaen一些經常使用的術語

倉庫

本地倉庫

  • Maven會把咱們項目所構建出來的jar包等等資源存放在本地倉庫中。當咱們須要jar包的時候,Maven第一時間也是去本地倉庫中尋找jar包

中心倉庫:

  • ** 當Maven在本地倉庫和私服找不到咱們須要的jar包的時候,就去中心倉庫中幫咱們下載對應的jar包**。那Maven怎麼知道去哪裏下載呢??其實Maven已經配置好的了

apache-maven-3.2.1\lib\maven-model-builder-3.2.1\org\apache\maven\model下的POM.xml文件中已經配置好了

<repositories>
    <repository>
      <id>central</id>
      <name>Central Repository</name>
      <url>http://repo.maven.apache.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>

  <pluginRepositories>
    <pluginRepository>
      <id>central</id>
      <name>Central Repository</name>
      <url>http://repo.maven.apache.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <releases>
        <updatePolicy>never</updatePolicy>
      </releases>
    </pluginRepository>
  </pluginRepositories>

私有服務器

  • 存儲一些jar包的服務器,因爲本地倉庫不可能擁有大部分的jar包,一個團隊要去開發,免不了老是去中心倉庫下載,這就很是耗費時間了。若是私有服務器擁有這些jar包,那麼每臺電腦就不用去中心倉庫中下載了...

maven軟件構建的生命週期

軟件的生命週期就是如下

-** 清除--> 編譯-->測試-->報告-->打包(jar\war)-->安裝-->部署**

maven生命週期命令插件

當咱們使用idea環境下開發,maven生命週期的插件就很是清晰了...

這裏寫圖片描述

maven座標

  1. 座標的組成: groupId + artifactId+ version
  • groupId:組id ,機構名,公司名:比如公司的id,或者是公司包名
    alibaba ——-》高德--》5.01版本
  • artifactId:構建物id ,產品名或者產品的id
  • version :版本號
  1. jar包組成:
    artifactId-version.jar

pom.xml介紹

pom.xml介紹 :project object model 項目對象模型 ,它是maven核心配置文件

當咱們把上面的術語瞭解完之後,對下面pom.xml配置文件就不會感到陌生了。

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>zhongfucheng3</groupId>
    <artifactId>zhongfucheng3</artifactId>
    <version>1.0-SNAPSHOT</version>


</project>

若是咱們想要咱們的項目可以有Junit測試的開發包,咱們只要指定對應的jar包依賴就好了..

這裏寫圖片描述

scope應用範圍有test、compile等等,默認是compile,那麼test和compile有什麼區別呢?

  • 間接依賴問題 :依賴的jar包必須是 compile 範圍,假如是test範圍,則發佈的jar包不會包含test範圍依賴的jar包,和依賴關係
<scope>test</scope>

Maven【私有倉庫、上傳jar包、引用私服jar包、上傳本地項目到私服】

前面已經說過了,咱們使用Maven的使用,若是須要導入相對應的jar包,Maven首先會在咱們的本地倉庫中尋找--->私有倉庫--->中心倉庫...

然而,咱們的本地倉庫經常沒有想要的jar包的,而常常去中心倉庫下載這就很是浪費時間和資源了...所以咱們通常都有一個私有倉庫...

另外有些公司都不提供外網給項目組人員,所以就不能使用maven訪問遠程的倉庫地址,因此頗有必要在局域網裏找一臺有外網權限的機器,搭建nexus私服,而後開發人員連到這臺私服上,這樣的話就能夠經過這臺搭建了nexus私服的電腦訪問maven的遠程倉庫

這裏寫圖片描述

準備步驟

咱們使用的是nexus框架來搭建私服,它屬於sonatype 機構的開源框架,用該框架架設maven 私有服務器

Nexus環境搭建

  • 第一步:下載nexus-webapp-1.9.2.4.war包,而後拷貝到tomcat下的webapps目錄中
  • 第二步:啓動tomcat 默認登陸帳戶密碼爲: admin admin123
  • 第三步:訪問http://localhost:8080/項目名稱/

tomcat會自動解析war包,而後就自動下載插件...
這裏寫圖片描述

訪問該項目,進到首頁

這裏寫圖片描述

登錄...
這裏寫圖片描述

倉庫介紹

這裏寫圖片描述

  • proxy:是遠程倉庫的代理。好比說在nexus中配置了一個central repository的proxy,當用戶向這個proxy請求一個artifact,這個proxy就會先在本地查找,若是找不到的話,就會從遠程倉庫下載,而後返回給用戶,至關於起到一箇中轉的做用
  • Hosted:是宿主倉庫,用戶能夠把本身的一些構件,deploy到hosted中,也能夠手工上傳構件到hosted裏。好比說oracle的驅動程序,ojdbc6.jar,在central repository是獲取不到的,就須要手工上傳到hosted裏
  • Group:是倉庫組,在maven裏沒有這個概念,是nexus特有的。目的是將上述多個倉庫聚合,對用戶暴露統一的地址,這樣用戶就不須要在pom中配置多個地址,只要統一配置group的地址就能夠了右邊那個Repository Path能夠點擊進去,看到倉庫中artifact列表。不過要注意瀏覽器緩存。我今天就發現,明明構件已經更新了,在瀏覽器裏卻看不到,還覺得是BUG,實際上是被瀏覽器緩存了
  • virtual:也是中央倉庫鏡像,支持M1老版本

每一個倉庫的做用:

  • 3rd party: 沒法從公共倉庫得到的第三方發佈版本的構件倉庫
  • Apache Snapshots: 用了代理ApacheMaven倉庫快照版本的構件倉庫
  • Central: 用來代理maven中央倉庫中發佈版本構件的倉庫
  • Central M1 shadow: 用於提供中央倉庫中M1格式的發佈版本的構件鏡像倉庫
  • Codehaus Snapshots: 用來代理CodehausMaven 倉庫的快照版本構件的倉庫
  • Releases: 用來部署管理內部的發佈版本構件的宿主類型倉庫
  • Snapshots:用來部署管理內部的快照版本構件的宿主類型倉庫

倉庫組是一個虛擬的概念,就是經過對實體倉庫(proxy、hosted)進行聚合, 對外暴露一個統一的地址這裏要注意的是,放到左邊的倉庫,纔是會被聚合的倉庫

倉庫組的配置順序:

這裏寫圖片描述

這裏寫圖片描述

上傳jar包到私服

直接經過網站上傳,把桌面上的pig-0.12.1.jar上傳到私有服務器中

這裏寫圖片描述

再次查看的時候,已經上傳上去了

這裏寫圖片描述

從私服依賴jar包

在pom.xml文件配置私服的路徑、組id、版本等等

<!-- 假如沒有私服 ,則 本地倉庫找不到,則訪問中心倉庫
     假若有私服 :訪問順序
       首先訪問本地倉庫
   本地倉庫沒有,則訪問私服倉庫
   私服倉庫也沒有,則訪問中心倉庫
 -->
    <!-- 加載的是 第三方項目使用的jar包 -->
    <repositories>
        <repository>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
            <id>public</id>
            <name>public</name>
            <url>http://localhost:8080/nexus-2.6.2/content/groups/public/</url>
        </repository>
    </repositories>

    <!-- 加載的是maven生命週期插件的jar包 -->
    <pluginRepositories>
    <pluginRepository>
        <releases>
            <updatePolicy>never</updatePolicy>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
        <id>public</id>
        <name>public</name>
        <url>http://127.0.0.1:8080/nexus-2.6.2/content/groups/public/</url>
    </pluginRepository>
    </pluginRepositories>

這裏寫圖片描述

在本地倉庫中也把私服的jar包下載下來了

這裏寫圖片描述

把本地項目發佈到私服

server的配置能夠在Maven的settings.xml中寫上

<!-- 分銷管理 ,把jar包發佈到私服中 -->
 <!--   配置服務器-->
     <server>
      <id>releases</id>
      <username>admin</username>
      <password>admin123</password>
    </server>
    <server>
      <id>snapshots</id>
      <username>admin</username>
      <password>admin123</password>
    </server>

值得注意的是:你得留意你用的是哪一個Maven,是你本身下載的Maven仍是使用Idea集成的Maven,若是沒有配置的話,那麼就會出現401錯誤

<distributionManagement>
  <!-- 發佈到 快照版本的倉庫,即 測試版本倉庫 -->
  <snapshotRepository>
  <id>snapshots</id>
  <url>http://127.0.0.1:8080/nexus-2.6.2/content/repositories/snapshots/</url>
  </snapshotRepository>
  <!-- 發佈到 發行版本的倉庫中,也能夠發佈到3rd party 倉庫 -->
  <repository>
    <id>releases</id>
  <url>http://127.0.0.1:8080/nexus-2.6.2/content/repositories/releases/</url>
  </repository>

再次查看倉庫組

這裏寫圖片描述


總結

  • Maven可以很好地管理咱們的項目,還可以管理咱們的jar包。在構建項目的時候十分方便。
  • 安裝Maven須要配置JAVA_HOME環境變量。
  • Settings.xml 配置了咱們的本地倉庫位置。
  • 過分去中心倉庫去加載jar包的話,會很是影響性能的。咱們搭建一個私有倉庫的話,若是私有倉庫有對應的jar包,就能夠直接在私有倉庫中找了。
  • 學會如何在私有倉庫的頁面上上傳jar包上去
  • 學會如何在項目上關聯私有倉庫的jar包
  • 學會如何把本地項目上傳到私有倉庫中。

若是文章有錯的地方歡迎指正,你們互相交流。習慣在微信看技術文章,想要獲取更多的Java資源的同窗,能夠關注微信公衆號:Java3y

相關文章
相關標籤/搜索