最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

教程揭秘 | 動力節(jié)點內(nèi)部Java零基礎教學文檔第八篇:Maven

2023-11-10 09:32 作者:動力節(jié)點  | 我要投稿

接上期后續(xù)

本期分享第八章節(jié)

Maven

已經(jīng)分享過半了,你們都跟上了嗎?

每天都在學習嘛?

有什么不會的嘛?

今日教學文檔分享來了?

今日新篇章

【Maven】

1.?當前開發(fā)中存在的問題

1.1.?一個項目就是一個工程

如果項目非常龐大,就不適合繼續(xù)使用package劃分模塊.最好是每一個模塊對應一個項目,利于分工協(xié)作,也利于項目針對性能化的部署.

1.2.?項目中需要的jar包必須拷貝

項目中的jar包需要手動"復制" "粘貼"到WEB-INF/lib文件夾中

同樣的的jar包會重復出現(xiàn)在不同的項目中,一方面浪費存儲空間,而工程比較臃腫.

借助Maven,可以將jar包僅僅保存在"倉庫中",有需要使用的工程只需要引用倉庫中的jar包,并不需要真的需要把jar包復制過來。

1.3.?jar包需要提前準備

不同的技術(shù)網(wǎng)站jar包下載方式存在一定的差異.

有些技術(shù)官網(wǎng)其jar就是通過Maven或者SVN/GIT等專門的工具進行下載.

借助于Maven可以以一種規(guī)范的方式下載jar包.因為所有知名框架或者第三方的工具包,按照統(tǒng)一的規(guī)范存放在Maven中央倉庫。

1.4.?jar包依賴的jar包需要導入項目

如果所有的jar包之間的依賴性關(guān)系都需要程序員維護,提高了學習成本。

2.?Maven概述

Maven項目對象模型(POM),可以通過一小段描述信息來管理項目的構(gòu)建,報告和文檔的項目管理工具軟件。Maven是一款服務于Java平臺的自動構(gòu)建工具。

Maven 除了以程序構(gòu)建能力為特色之外,還提供高級項目管理工具。由于 Maven 的缺省構(gòu)建規(guī)則有較高的可重用性,所以常常用兩三行 Maven 構(gòu)建腳本就可以構(gòu)建簡單的項目。由于 Maven 的面向項目的方法,許多 Apache Jakarta 項目發(fā)文時使用 Maven,而且公司項目采用 Maven 的比例在持續(xù)增長。

Maven這個單詞來自于意第緒語(猶太語),意為知識的積累,最初在Jakata Turbine項目中用來簡化構(gòu)建過程。當時有一些項目(有各自Ant build文件),僅有細微的差別,而JAR文件都由CVS來維護。于是希望有一種標準化的方式構(gòu)建項目,一個清晰的方式定義項目的組成,一個容易的方式發(fā)布項目的信息,以及一種簡單的方式在多個項目中共享JARs。

2.1?什么是構(gòu)建

以Java源文件,框架配置文件,JSP,HTML,圖片等資源作為原材料,去生產(chǎn)一個可以運行的項目過程。

編譯:Java源文件----->編譯(javac)----->Class文件---Java-->交給JVM執(zhí)行

部署:一個BS項目運行的并不是動態(tài)WEB項目本身,而是這個動態(tài)WEB工程"編譯的結(jié)果"

2.2?構(gòu)建的各個環(huán)節(jié)

2.2.1?清理 ?maven clean

將以前編譯得到的class字節(jié)碼文件刪除,為下次編譯做準備

2.2.2?編譯 ??maven compile

將Java源程序編譯成class字節(jié)碼文件

2.2.3?測試 ?maven ?test

自動測試,自動調(diào)用JUnit程序

2.2.4?報告

測試程序執(zhí)行的結(jié)果就是測試報告

2.2.5?打包 maven package

就是將編譯好的class字節(jié)碼文件進行封裝成一個文件包(war包),web工程是war包,Java工程是jar包??

2.2.6?安裝 maven install

Maven的特定概念,將打包得到的文件復制到"倉庫"中指定的位置

2.2.7?部署(發(fā)布) ?maven deploy

將動態(tài)的web項目生成的war包復制到指定的服務器目錄下,可以使其運行

?

2.3?基本原理

Maven 的基本原理很簡單,采用遠程倉庫和本地倉庫以及一個類似 build.xml 的 pom.xml ,將 pom.xml 中定義的 jar 文件從遠程倉庫下載到本地倉庫,各個應用使用同一個本地倉庫的 jar ,同一個版本的 jar 只需下載一次,而且避免每個應用都去拷貝 jar 。

同時它采用了現(xiàn)在流行的插件體系架構(gòu),只保留最小的核心,其余功能都通過插件的形式提供,所以 maven 下載很小,在執(zhí)行 maven 任務時,才會自動下載需要的插件。


mirror相當于一個攔截器,它會攔截maven對remote repository的相關(guān)請求,把請求里的remote repository地址,重定向到mirror里配置的地址。


此時,B Repository被稱為A Repository的鏡像。如果倉庫X可以提供倉庫Y存儲的所有內(nèi)容,那么就可以認為X是Y的一個鏡像。換句話說,任何一個可以從倉庫Y獲得的構(gòu)件,都能夠從它的鏡像中獲取。

< mirrors/>是鏡像列表,是maven從遠程倉庫里下載構(gòu)件的一組服務器鏡像。鏡像能減輕中央maven庫的負載,也能突破代理等的網(wǎng)絡環(huán)境的限制,每個倉庫都有一個ID,而mirror需要和倉庫的ID對應。

2.4?坐標

(1)定義

坐標用來標識時空中的某個點,方便人們找到位置,如中電信息大廈可以用經(jīng)緯度坐標找到,也可以通過國家、省市區(qū)、街道、門牌組成的坐標去找。

(2)分類

groupId: 組織ID,一般是公司、團體名稱 ?com.alibaba.xxx

artifactId:實際項目的ID,一般是項目、模塊名稱 ?工程名

version:版本,開發(fā)中的版本一般打上 SNAPSHOT 標記

Type/packaging :包類型,如JAR,WAR,POM…

classifier:分類,如二進制包、源、文檔

通過這個規(guī)則就可以定位到世界上任何一個構(gòu)件。

2.5?三級倉庫結(jié)構(gòu)

(1)遠程公用倉庫

Maven 內(nèi)置了遠程公用倉庫: http://repo1.maven.org/maven2 這個公用倉庫也叫中央倉庫是由 Maven 自己維護,包好了世界上大部分流行的開源項目構(gòu)件。

https://mvnrepository.com

(2)內(nèi)部中央倉庫

也稱私有共享倉庫(私服)。一般是由公司自己設立的,只為本公司內(nèi)部共享使用。它既可以作為公司內(nèi)部構(gòu)件協(xié)作和存檔,也可以作為公用類庫鏡像緩存,減少在外部訪問和下載的頻率。

(3)本地倉庫

Maven 會將工程中依賴的構(gòu)件(Jar包)從遠程下載到本機一個目錄下管理,通常默認在 $user.home/.m2/repository 下。

3.?Maven環(huán)境變量配置

3.1?檢查JAVA_HOME環(huán)境變量

MAVEN是由Java編寫,其也依賴JAVA環(huán)境變量

3.2?解壓安裝Maven文件

3.3?配置MAVEN_HOME

MAVEN_HOME/M2_HOME的配置是為了maven中命令的執(zhí)行


通過:mvn ?-version/mvn ?-v 查看安裝的Maven信息

3.4?Maven常用命令

1. mvn clean: 清理

2. mvn compile :編譯主程序

3. mvn test-compile : 編譯測試程序

4. mvn test?: 執(zhí)行測試

5. mvn package : 打包

6.mvn install : 安裝

4.?IDEA配置本地Maven

注意:maven默認的JDK版本:1.5,所以在使用Maven需要對maven的編譯環(huán)境進行配置。

?


4.1?配置本地倉庫

本地的倉庫 ?jar包存放的文件夾。

??在IDEA 2020.1 版本不能配置本地倉庫,配置后可能出現(xiàn)無法找到jar包

??需要在IDEA中指定本地倉庫。

4.2?在settings中配置JDK編譯的版本號

4.3?配置鏡像服務器

4.4?在IDEA中配置本地Maven


5.?IDEA創(chuàng)建Maven項目

5.1?準備工作創(chuàng)建空項目

?


5.2?創(chuàng)建Java項目模塊

5.2.1?創(chuàng)建



5.2.2?加入依賴


注意:

如果項目相關(guān)jar包已經(jīng)引入了,但是沒法使用jar包:

1.?刷新

2.?重啟IDEA

5.3?創(chuàng)建web項目

5.3.1?創(chuàng)建


5.3.2?配置tomcat


注意:

maven的web項目執(zhí)行方案,有兩種:

1.?使用maven插件,tomcat插件. maven的tomcat插件,目前能夠找到的是tomcat 7.0,容易出現(xiàn)jar包的版本沖突問題

2.?配置tomcat服務器,然后在tomcat服務器中運行

6.?Maven的核心概念

6.1?Maven約定的目錄結(jié)構(gòu)

項目文件夾名稱

src目錄

|--main

|--java

|--resources

|--test

|--java

|--resources

target目錄

pom.xml

以上目錄是maven標準的目錄,

src 源碼目錄

main ?主程序目錄

test ??測試程序目錄

target 編譯文件目錄

pom.xml ??項目maven配置文件

6.2?POM

POM文件,是maven項目的核心配置管理文件,主要配置:項目的依賴信息,

依賴jar包或者依賴的項目,配置項目的編譯信息。

6.3?GAV

Maven在很大程度上就是管理jar包的一個倉庫,所以需要區(qū)分jar包。maven為了區(qū)分jar包建立一套坐標系統(tǒng),所有的jar包都是軟件/項目,軟件是公司或者組織開發(fā),一個公司/組織又可能存在多個軟件/項目,并且同一個軟件/項目也存在版本的差異。

基于這樣的情況,maven使用公司/組織、項目、版本號三個標識結(jié)合在一起,對jar包進行唯一定位。

groupId ??公司/組織

artifactId ??項目/模塊名

version ????版本號

6.4?倉庫

在maven中,存放jar包的文件夾,就是倉庫。按照GAV信息,形成目錄路徑存放jar文件。Maven根據(jù)GAV信息,從倉庫中查找jar文件。

6.4.1?倉庫的分類

中央倉庫 : maven倉庫 ??美國

倉庫鏡像 : 由于中央在美國,其他區(qū)域訪問時,慢,且中央倉庫壓力大,在這樣的情況下,出現(xiàn)倉庫鏡像,分擔中央倉庫的壓力。

私服倉庫:不論是中央倉庫還是鏡像倉庫,都是對外公開的倉庫,可能存在一些公司,自主研發(fā)的技術(shù),需要被使用,但是又不希望暴露,公司可以自己搭建maven倉庫,設置訪問權(quán)限,只有有訪問權(quán)限的人才能訪問。

本地倉庫:開發(fā)者本地存放jar的文件夾。

?


6.5?依賴

依賴,maven項目需要的關(guān)聯(lián)的jar信息,可以通過在pom.xml文件中,配置相關(guān)jar包信息,讓maven項目自動導入相關(guān)jar包。

?

6.5.1?依賴的作用域

依賴的作用域就是指依賴生效的范圍。在依賴的配置中,可以通過制定scope標簽的值,設置依賴的作用范圍。

以上3個值中:

compile作用域,jar包會全程參與

test 作用域,只會對測試程序目錄生效,且不參與打包

provided 作用域,只參與開發(fā),不參與打包。例如:servlet和jsp的jar包,可以在pom文件中引入,這樣在開發(fā)web項目時就可以直接使用相關(guān)的api,但是實際運行時,項目在tomcat服務器中運行,tomcat服務器有自己的相關(guān)jar包,此時項目有jsp和servlet的jar包,tomcat自身也有,會出現(xiàn)jar包沖突,基于這樣的情況,設置項目中jar包的作用域provided

注意:

scope還有system屬性值,system表示系統(tǒng)本地的,如果maven倉庫沒有jar包,此時無法進行下載,可以使用system表示這個jar包在本地,可以通過systemPath 設置本地jar包的路徑

6.5.2?依賴的傳遞性

如果A項目中引入了某個jar包,B項目引入A項目,B項目就可以使用A項目中引入的jar包,這種行為就是依賴的傳遞性。

?


6.5.3?jar包的排除

由于jar包具有傳遞性,可能出現(xiàn)在引入jar包時引入了重復jar包??赡苓@些重復jar包的版本號還不一致。實際上能夠引入生效jar包只有一個,如果這個生效的jar不是當前項目需要的,則可以進行排除。

注意:

當出現(xiàn)重復jar包,maven采用最短路徑原則,如果路徑一樣,采用最下面的。

?


注意:

6.5.4?依賴繼承

繼承,在Java中子類可以繼承父類的屬性方法。在Maven中,子項目可以繼承父項目的依賴。在Maven中,子項目可以直接繼承父項目中的所有的依賴,但是這樣會導致子項目可能需要也可能不需要的依賴都會被繼承,所以maven中也提供,父項目聲明依賴,子項目不能直接繼承,需要顯示的聲明依賴,才能繼承。

6.5.4.1?直接繼承依賴

【創(chuàng)建父項目】



【創(chuàng)建子項目】



?

【查看依賴關(guān)系】


在父項目中,dependencies中依賴,會被子項目直接繼承。


在父項目里面定義類可以在子項目里面直接使用

6.5.4.2?需要顯示聲明才能繼承【依賴管理】

如果希望,子項目中使用jar通過父項目定義,則可以使用dependencyManagement

進行管理,子項目中,只需要聲明jar的groupId和artifactId,則默認優(yōu)先去父項目中查找這個依賴,然后繼承。

這樣做,可以優(yōu)化子項目的繼承,只需要引入需要的jar,父項目中定義了依賴,可以統(tǒng)一依賴之間的版本,減少版本的沖突。

需要顯示的聲明,但是可以不用指定版本號

6.5.5?統(tǒng)一定義變量

在maven項目,pom.xml中可能引入相當多的jar包,這些jar的版本號相應一致的,如果版本號發(fā)生了變化,所有相關(guān)的jar的版本號就都要進行修改。此時需要定義變量,在依賴直接使用變量,如果版本信息發(fā)生變化,只需要修改變量即可。

變量可以在pom文件中properties標簽中定義,使用${自定義的標簽名引入}

?


7.?項目聚合

在目前實際開發(fā)中,隨著業(yè)務需求復雜,項目越來越大,項目架構(gòu)逐漸演變,

單體應用 ---> 垂直應用 ---> 微服務應用

單體應用:單個項目 ?java、html、css、js等全部寫在一個工程里

垂直應用:整個項目豎型結(jié)構(gòu),例如:前后端分離

微服務應用:應用是服務,服務和服務之間組合,產(chǎn)生新的服務

在一個項目中,存在多個模塊,模塊之間存在聯(lián)系,存在依賴。將一個大型項目拆分成多個項目。在項目之間相互依賴,組成新的項目。

使用maven的module項目,完成項目的拆分,將一個系統(tǒng)可以拆分為n個子系統(tǒng)(子項目)進行開發(fā):

可以按照三層結(jié)果進行拆分,也可以按照項目的模塊進行拆分。

?


7.1?建立maven_crm項目



Packaging:pom項目

?

7.2?建立maven_crm_domain項目


Packaging: jar

繼承:maven_crm

7.3?建立maven_crm_dao項目


Packageing:jar

繼承:maven_crm

依賴:maven_crm_domain?

7.4?建立maven_crm_service項目


Packageing:jar

繼承:maven_crm?

依賴:maven_crm_dao

7.5?建立maven_crm_web項目


Packageing:war

繼承:maven_crm

依賴:maven_crm_service

7.6?具體的依賴根據(jù)項目情況而配置

更多干貨我們下期再說!

下期會分享

第九章節(jié)

Mybatis

相關(guān)知識~

下期見!


教程揭秘 | 動力節(jié)點內(nèi)部Java零基礎教學文檔第八篇:Maven的評論 (共 條)

分享到微博請遵守國家法律
开化县| 浏阳市| 新建县| 都江堰市| 姚安县| 和龙市| 冕宁县| 长垣县| 洪江市| 上饶市| 安宁市| 新田县| 汤阴县| 扬州市| 宜良县| 秦皇岛市| 师宗县| 张家口市| 体育| 青浦区| 渑池县| 信丰县| 荔浦县| 同心县| 庐江县| 柘荣县| 广丰县| 读书| 外汇| 苏尼特左旗| 万源市| 通海县| 云浮市| 佛山市| 镶黄旗| 芮城县| 静乐县| 山东省| 八宿县| 孝昌县| 彩票|