日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

maven 加入第三方库_关于maven,你还要翻阅多少资料才能整理出这一份完整文档...

發布時間:2023/12/19 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 maven 加入第三方库_关于maven,你还要翻阅多少资料才能整理出这一份完整文档... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、介紹

Maven是一款Apache基金會下的項目構建工具,可以用來任何基于Java的項目,遵循約定由于配置的思想,能夠大大簡化我們工作中繁瑣的項目構建。官網地址:http://maven.apache.org/

二、環境安裝

1、下載

下載地址:http://maven.apache.org/download.cgi

下載頁面

2、解壓

a) 如果是windows環境,直接用解壓工具解壓

b) 如果是Linux環境

tar -zxvf apache-maven-3.6.0-bin.tar.gz

3、環境變量配置

a) windows下的環境變量,計算機->屬性->高級系統設置-->環境變量

M2_HOME配置

Path配置

b) Linux服務器

export M2_HOME = /opt/softwares/apache-maven-3.6.0 export PATH = PATH;M2_HOME/bin

c) 檢查是否安裝正確

mv -v # 輸出版本號 echo $M2_HOME # Linux下輸出環境變量路徑

4、安裝目錄說明

安裝目錄說明

說明:

bin:該目錄下mvn、mvnDebug是基于Linux平臺的shell腳本,mvn.bat、mvnDebug.bat是基于Windows平臺的bat腳本,在命令行輸入mvn命令時實際上是調用mvn或mvn.bat腳本。mvn和mvnDebug的區別是mvnDebug多了一條MAVENDEBUGOPTS配置,作用是運行Maven時開啟debug模式以調試Maven本身。m2.conf文件是classworlds的配置文件,Maven啟動時會自動加載。

boot: 該目錄只包含一個文件plexus-classworlds-2.5.2.jar,plexus-classworlds是一個類加載器框架,相對于默認的java類加載器,它提供了更加豐富的語法以便配置,Maven使用該框架加載自己的類庫。

conf: 該目錄包含了Maven的配置文件settings.xml,可以指定2種級別:全局級別:直接修改maven/conf/settings.xml文件可以全局定制Maven的行為,對一臺機器上的所有用戶有效。用戶級別:將該文件復制到maven/conf/settings.xml文件可以全局定制Maven的行為,對一臺機器上的所有用戶有效。用戶級別:將該文件復制到{user.home}/.m2/目錄下,然后修改settings.xml配置,在當前用戶范圍內定制Maven的行為。

lib: 該目錄包含了所有Maven運行時需要的Java類庫,Maven本身是分模塊的maven-*.jar都是maven自己的包,還有很多第三方依賴包。

LICENSE: Maven使用的軟件許可證是Apache LicenseVersion 2.0。

NOTICE: Apache Maven Distribution使用的第三方軟件。

README.txt: Maven的簡明介紹,包括系統要求、安裝說明、Maven URLS等。

三、基本命令

Maven項目構建過程中,主要構建命令有幾種:

  • mvn validate 驗證,驗證項目是正確的并且所有的信息是可用的;
  • mvn clean 清理,清理項目緩存輸出,一般是target文件夾被刪除;
  • mvn compile 編譯,將java源文件編譯成.class文件;
  • mvn test 測試,生成測試報告,運行test目錄下的所有單元測試;
  • mvn package 打包,將項目打成jar、war或者pom;
  • mvn install 安裝,將當前項目安裝到本地maven庫,供其他項目依賴;
  • mvn deploy部署,在構建環境中完成,復制最終的包到遠程庫。

執行后面的命令會自動執行前面的命令,比如執行mvn package時會執行validate、clean、compile、test、package五個階段。

執行過程

四、核心概念

1、項目對象模型(POM)

Maven根據項目的pom.xml文件,把它轉化成項目對象模型(POM),然后對其進行管理

項目對象模型<?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>com.mage</groupId><artifactId>film</artifactId><version>1.0</version><packaging>war</packaging> ?<name>Film</name><description>Demo project for Spring Boot</description> ?<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.6.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent> ?<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties> ?<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency></dependencies><build><finalName>film</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build> </project>

a) 基本信息

modelVersionMaven模塊版本,目前我們一般都取值4.0.0groupId必選,組織名稱,一般用戶包路徑。artifactId必選,模塊名稱,一般是項目或者模塊名字。version必選,版本packaging可選,默認是jar,打包類型,可取值:jar,war,pom等。

b) 依賴dependencies

groupId依賴項的groupIdartifactId依賴項的artifactIdversion依賴項的版本scope依賴項的適用范圍: compile,缺省值,適用于所有階段,會隨著項目一起發布。 provided,類似compile,期望JDK、容器或使用者會提供這個依賴。如servlet.jar。 runtime,只在運行時使用,如JDBC驅動,適用運行和測試階段。 test,只在測試時使用,用于編譯和運行測試代碼。不會隨項目發布。 system,類似provided,需要顯式提供包含依賴的jar,Maven不會在Repository中查找它。之前例子里的junit就只用在了test中。exclusions排除項目中的依賴,解決沖突時使用。exclusion去除依賴項,如果X需要A,A包含B依賴,那么X可以聲明不要B依賴,只要在exclusions中聲明exclusion.

Maven從倉庫解析依賴的機制

當本地倉庫沒有依賴構件的時候,Maven會自動從遠程倉庫下載;當依賴版本為快照版本時,Maven會自動找到最新的快照。

  • 當依賴范圍scope=system時,Maven直接從本地文件系統解析構件;
  • 根據依賴坐標計算倉庫路徑后,嘗試直接從本地倉庫尋找構件,若發現構件則解析成功;
  • 在本地倉庫不存在相應構件的情況下,若依賴版本是顯式的發布版本構件時,如1.1.0、1.2-alpha-1等,則便利所有的遠程倉庫,發現后下載到本地倉庫并解析使用;
  • 如果依賴的版本是RELEASE或者LASTEST,則基于更新策略讀取所有遠程倉庫的元數據groupId/artifactId/maven-metadata.xml,將其與本地倉庫的對應元數據合并后,計算出RELEASE或者LASTEST的真實值,然后基于真實值檢查本地和遠程倉庫;
  • 如果依賴版本是SNAPSHOT,則基于更新策略讀取所有遠程倉庫的元數據groupId/artifactId/version/maven-metadata.xml,將其與本地倉庫的對應元數據合并后,得到最新快照版本的值,然后基于該值檢查本地或者從遠程倉庫下載;
  • 如果最后解析到的構件版本是時間戳格式的快照,如1.0-20170712.191220-2,則復制其時間戳格式的文件至非時間戳格式,如SNAPSHOT,并使用該非時間戳格式的構件。
  • 當依賴的版本不明晰的時候,如RELEASE、LASTEST、SNAPSHOT,Maven就需要基于更新遠程倉庫的更新策略來檢查更新。

    c) 其他元素

    • properties:配置
    • dependencyManagement:配置依賴管理
    • build :插件列表,下面包含有plugins和resources
    • parent:父項目
    • modules:聚合多個模塊

    2、POM關系

    a) 依賴管理

    依賴管理分為傳遞性依賴、依賴調解、可選依賴、排除依賴、歸類依賴等。

    傳遞性依賴

    maven模塊 -> spring-jdbc -> spring-core -> commons-logging

    假設: A -> B -> C,即A對B是第一直接依賴,B對C是第二直接依賴,A對C是傳遞性依賴,第一直接依賴(簡稱F)和第二直接依賴(簡稱S)的范圍決定了傳遞性依賴(簡稱T)的范圍。如圖所示:

    依賴的范圍

    例如:A -> B -> C,A依賴B的范圍是test,B依賴C的范圍是compile,則A傳遞依賴C的范圍是test。

    結論:當S=compile時,T與F的范圍一致;當S=test時,依賴不會傳遞;當S=provided時,只有當F=provided時,T=provided;當S=runtime時,T=F,但F=compile例外,此時T=runtime.

    依賴調解

    依賴調解第一原則:路徑最近者優先。

    例如:A -> B -> C -> X1 長度為3 A -> D -> X2 長度為2,因此X2會被解析使用 依賴調解第二原則:第一原則優先,依賴路徑相等時,POM中依賴聲明順序靠前的優先。

    例如:A -> B -> X1 長度為2 A -> C -> X2 長度為2,但是POM文件中B的依賴聲明靠前,因此X1會被解析使用。

    可選依賴

    A依賴于B,B依賴于X和Y,B對于X和Y的依賴都是可選依賴,即optional=true

    A?B、B?X(可選)、B?Y(可選)。可選依賴不會傳遞,即X、Y對A沒有影響。

    可選依賴一般是多種互斥的特性,具體使用時只選其一。

    可選依賴的互斥特性

    排除依賴

    使用exclusions元素聲明排除依賴,exclusions包含一個或者多個exclusion子元素,因此可以排除一個或者多個傳遞性依賴。注意聲明exclusion時只需要groupId和artifactId,而不需要version元素,因為只需要groupId和artifactId就可以唯一定位依賴圖中的某個依賴。

    歸類依賴

    spring的依賴包版本都是相同的,可以使用properties元素定義Maven屬性spring.version=4.x

    在定義依賴時可以使用美元符號加大括弧環繞的方式來引用Maven屬性,例如${spring.version}。

    b) 聚合

    聚合:多個項目或者模塊聚合到一起,建立一個package方式為pom的項目parent專門負責聚合工作,并使用modules-module指定子模塊,目的是快速構建項目。

    聚合模塊視圖

    c) 繼承

    繼承:多個模塊聚合時,子模塊需要繼承父模塊以消除重復配置。

    繼承關系下的模塊

    3、生命周期和插件

    Maven的生命周期就是對所有的構建過程進行抽象和統一。包含了項目的清理、初始化、編譯、測試、打包、集成測試、驗證、部署和站點生成等幾乎所有的構建步驟。Maven的生命周期是抽象的,即生命周期不做任何實際的工作,實際任務由插件完成,類似于設計模式中的模板方法。

    a) 三套生命周期

    Maven有三套相互獨立的生命周期,分別是clean、default和site。每個生命周期包含一些階段(phase),階段是有順序的,后面的階段依賴于前面的階段。

    1 、clean生命周期:清理項目,包含三個phase。

    1)pre-clean:執行清理前需要完成的工作

    2)clean:清理上一次構建生成的文件

    3)post-clean:執行清理后需要完成的工作

    2 、default生命周期:構建項目,重要的phase如下

    1)validate:驗證工程是否正確,所有需要的資源是否可用。

    2)compile:編譯項目的源代碼。

    3)test:使用合適的單元測試框架來測試已編譯的源代碼。這些測試不需要已打包和布署。

    4)Package:把已編譯的代碼打包成可發布的格式,比如jar。

    5)integration-test:如有需要,將包處理和發布到一個能夠進行集成測試的環境。

    6)verify:運行所有檢查,驗證包是否有效且達到質量標準。

    7)install:把包安裝到maven本地倉庫,可以被其他工程作為依賴來使用。

    8)Deploy:在集成或者發布環境下執行,將最終版本的包拷貝到遠程的repository,使得其他的開發者或者工程可以共享。

    3 、site生命周期:建立和發布項目站點,phase如下

    1)pre-site:生成項目站點之前需要完成的工作

    2)site:生成項目站點文檔

    3)post-site:生成項目站點之后需要完成的工作

    4)site-deploy:將項目站點發布到服務器

    b 理解生命周期

    各個生命周期相互獨立,一個生命周期的階段前后依賴。舉例如下:

    mvn clean:調用clean生命周期的clean階段,實際執行pre-clean和clean階段;
    mvn test調用default生命周期的test階段,實際執行test以及之前所有階段
    mvn clean install

    調用clean生命周期的clean階段和default的install階段,實際執行pre-clean和clean,install以及之前所有階段

    c) 插件

    Maven本質上是一個插件框架,它的核心并不執行任何具體的構建任務,所有這些任務都交給插件來完成,例如編譯源代碼是由maven- compiler-plugin完成的。進一步說,每個任務對應了一個插件目標(goal),每個插件會有一個或者多個目標,例如maven- compiler-plugin的compile目標用來編譯位于src/main/java/目錄下的主源碼,testCompile目標用來編譯位于src/test/java/目錄下的測試源碼。用戶可以通過兩種方式調用Maven插件目標。

    第一種方式是將插件目標與生命周期階段(lifecycle phase)綁定,這樣用戶在命令行只是輸入生命周期階段而已,例如Maven默認將maven-compiler-plugin的compile目標與 compile生命周期階段綁定,因此命令mvn compile實際上是先定位到compile這一生命周期階段,然后再根據綁定關系調用maven-compiler-plugin的compile目標。

    第二種方式是直接在命令行指定要執行的插件目標,例如mvn archetype:generate 就表示調用maven-archetype-plugin的generate目標,這種帶冒號的調用方式與生命周期無關。在執行生命周期時,使用都是插件,如

    插件很多: http://maven.apache.org/plugins/index.html

    添加一個 打包源碼的插件

    <plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-source-plugin</artifactId><version>2.4</version><executions><execution><phase>package</phase><goals><goal>jar-no-fork</goal></goals></execution></executions></plugin> </plugins> ?

    即:

    插件代碼示例

    4、倉庫

    Maven倉庫分為兩類:本地倉庫和遠程倉庫。當Maven根據坐標尋找構件時,首先會查看本地倉庫,若本地倉庫存在此構件則直接使用;若本地倉庫不存在此構件,Maven就會去遠程倉庫查找,查找到下載到本地倉庫再使用。若本地倉庫和遠程倉庫都沒有需要的構件,Maven就會報錯。

    a) 倉庫分類

    中央倉庫: Maven核心自帶的遠程倉庫,包含了絕大部分開源構件,默認情況,當本地倉庫沒有Maven需要構件時,就從中央倉庫下載。

    Maven默認的中央倉庫為,在apache-maven-3.3.9lib中找到:

    jar包示例

    使用解壓工具找到pom.xml

    xml文件代碼示例

    私服:特殊的遠程倉庫,架設在局域網內的倉庫服務,代理公網的遠程倉庫,當Maven需要下載構件時,從私服請求,若私服不存在該構件,則從公網遠程倉庫下載,緩存到私服之后,再為Maven的下載請求提供服務。另外無法從公網倉庫下載的構件也能從本地上傳到私服供項目使用。

    本地倉庫:用戶自定義本地倉庫的地址,需編輯${user.home}/.m2/setting.xml文件,設置localRepository節點的值為倉庫地址即可,默認情況下${user.home}/.m2/setting.xml是不存在的,需要用戶從安裝目錄復制${M2_HOME}/conf/setting.xml文件在進行編輯。

    <settings><localRepository>C:/maven/repository</localRepository> </settings>

    b) 倉庫鏡像

    我們發現使用默認的maven官方的倉庫(更新依賴庫),網速一個是比較慢,一個是因為被墻,一些jar包無法下載,非常老火。配置其他快速的maven倉庫鏡像。

    官方鏡像

    <mirror> <id>repo2</id> <mirrorOf>central</mirrorOf> <name>Human Readable Name for this Mirror.</name> <url>http://repo2.maven.org/maven2/</url> </mirror>

    阿里鏡像

    <mirror><id>alimaven</id><mirrorOf>central</mirrorOf><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url> </mirror>

    配置鏡像

    編輯conf/settings.xml配置中央倉庫鏡像:

    鏡像代碼示例

    三個元素id,name,url與一般倉庫配置無異,表示該鏡像倉庫的唯一標識符、名稱以及地址。其中<mirrorOf>:

    值說明Central中央倉庫的鏡像,任何對于中央倉庫的請求都會轉至該鏡像,用戶也可以使用同樣的方法配置其他倉庫的鏡像。*匹配所有遠程倉庫external:*匹配所有遠程倉庫,使用localhost的除外,使用file://協議的除外。也就是說,匹配所有不在本機上的遠程倉庫。repo1,repo2匹配倉庫repo1和repo2,使用逗號分隔多個遠程倉庫。*,!repo1匹配所有遠程倉庫,repo1除外,使用感嘆號將倉庫從匹配中排除。

    需要注意的是,由于鏡像倉庫完全屏蔽了被鏡像倉庫,當鏡像倉庫不穩定或者停止服務的時候,Maven仍將無法訪問被鏡像倉庫,因而將無法下載構件。

    總結

    以上是生活随笔為你收集整理的maven 加入第三方库_关于maven,你还要翻阅多少资料才能整理出这一份完整文档...的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。