<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          全網(wǎng)最詳細的 Maven 教程!

          共 12628字,需瀏覽 26分鐘

           ·

          2021-09-06 07:30

          前言:目前所有的項目都在使用maven,可是一直沒有時間去整理學(xué)習(xí),這兩天正好有時間,好好的整理一下。

          一、為什么使用Maven這樣的構(gòu)建工具【why】

          ① 一個項目就是一個工程

          如果項目非常龐大,就不適合使用package來劃分模塊,最好是每一個模塊對應(yīng)一個工程,利于分工協(xié)作。借助于maven就可以將一個項目拆分成多個工程

          ② 項目中使用jar包,需要“復(fù)制”、“粘貼”項目的lib中

          同樣的jar包重復(fù)的出現(xiàn)在不同的項目工程中,你需要做不停的復(fù)制粘貼的重復(fù)工作。借助于maven,可以將jar包保存在“倉庫”中,不管在哪個項目只要使用引用即可就行。

          ③ jar包需要的時候每次都要自己準備好或到官網(wǎng)下載

          借助于maven我們可以使用統(tǒng)一的規(guī)范方式下載jar包,規(guī)范

          ④ jar包版本不一致的風(fēng)險

          不同的項目在使用jar包的時候,有可能會導(dǎo)致各個項目的jar包版本不一致,導(dǎo)致未執(zhí)行錯誤。借助于maven,所有的jar包都放在“倉庫”中,所有的項目都使用倉庫的一份jar包。

          ⑤ 一個jar包依賴其他的jar包需要自己手動的加入到項目中

          FileUpload組件->IO組件,commons-fileupload-1.3.jar依賴于commons-io-2.0.1.jar

          極大的浪費了我們導(dǎo)入包的時間成本,也極大的增加了學(xué)習(xí)成本。借助于maven,它會自動的將依賴的jar包導(dǎo)入進來。

          二、maven是什么【what】

          ① maven是一款服務(wù)于java平臺的自動化構(gòu)建工具

          make->Ant->Maven->Gradle

          名字叫法:我們可以叫妹文也可以叫麥文,但是沒有叫媽文的。

          ② 構(gòu)建

          構(gòu)建定義:把動態(tài)的Web工程經(jīng)過編譯得到的編譯結(jié)果部署到服務(wù)器上的整個過程。

          編譯:java源文件[.java]->編譯->Classz字節(jié)碼文件[.class]

          部署:最終在sevlet容器中部署的不是動態(tài)web工程,而是編譯后的文件

          圖片

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

          • 清理clean:將以前編譯得到的舊文件class字節(jié)碼文件刪除
          • 編譯compile:將java源程序編譯成class字節(jié)碼文件
          • 測試test:自動測試,自動調(diào)用junit程序
          • 報告report:測試程序執(zhí)行的結(jié)果
          • 打包package:動態(tài)Web工程打War包,java工程打jar包
          • 安裝install:Maven特定的概念-----將打包得到的文件復(fù)制到“倉庫”中的指定位置
          • 部署deploy:將動態(tài)Web工程生成的war包復(fù)制到Servlet容器下,使其可以運行

          三、安裝maven

          ① 當前系統(tǒng)是否配置JAVA_HOME的環(huán)境變量

          ② 下載maven,解壓maven放在一個非中文無空格的路徑下

          ③ 配置maven的相關(guān)環(huán)境變量

          • 在環(huán)境變量增加M2_HOME,路徑是maven解壓后的根目錄
          • 在環(huán)境變量里的path中增加maven/bin的目錄

          ④ 驗證:maven -v 查看maven版本

          看到版本信息,恭喜你已經(jīng)OK了。

          圖片

          四、第一個maven

          ① 創(chuàng)建約定的目錄結(jié)構(gòu)(maven工程必須按照約定的目錄結(jié)構(gòu)創(chuàng)建)

          根目錄:工程名
          |---src:源碼
          |---|---main:存放主程序
          |---|---|---java:java源碼文件
          |---|---|---resource:存放框架的配置文件
          |---|---test:存放測試程序
          |---pop.xml:maven的核心配置文件

          我們按照上面的文件夾目錄結(jié)構(gòu)手動創(chuàng)建一下,不用任何IDE環(huán)境(手動的其實最有助于我們理解maven)

          圖片

          文件內(nèi)容如下

          src/main/java/com/hzg/maven目錄下新建文件Hello.java,內(nèi)容如下

          package com.hzg.maven;  
          public class Hello {  
            public String sayHello(String name){  
              return "Hello "+name+"!";  
            }  
          }  

          POM文件內(nèi)容:

          <?xml version="1.0" ?>  
          <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.hzg.maven</groupId>  
              <artifactId>Hello</artifactId>  
              <version>0.0.1-SNAPSHOT</version>  
            
              <name>Hello</name>  
            
              <dependencies>  
                  <dependency>  
                      <groupId>junit</groupId>  
                      <artifactId>junit</artifactId>  
                      <version>4.0</version>  
                      <scope>test</scope>  
                  </dependency>  
              </dependencies>  
          </project>  

          ② 常用maven命令

          • mvn clean:清理
          • mvn compile:編譯主程序
          • mvn test-compile:編譯測試程序
          • mvn test:執(zhí)行測試
          • mvn package:打包
          • mvn install:安裝

          執(zhí)行maven命令必須進入到pom.xml的目錄中進行執(zhí)行

          進入到項目的pom.xml目錄之后,就可以執(zhí)行啦。

          1、運行 mvn compile

          圖片

          OK,運行完畢,你在pom.xml配置的依賴的包已經(jīng)導(dǎo)入到倉庫了,問題來了,倉庫默認的位置在哪?

          倉庫的默認位置:c:\Usrs[登錄當前系統(tǒng)的用戶名].m2\repository

          剛才執(zhí)行完compile之后,之前的文件夾發(fā)生了變化

          圖片

          我們發(fā)現(xiàn)Hello項目里里多了一個target文件夾。文件夾的內(nèi)容為:

          圖片

          發(fā)現(xiàn)target里主要存放的就是編譯后的字節(jié)碼文件

          2、運行mvn test-compile,target文件夾下面除了classes之外多了test-classes文件夾

          3、運行mvn package,target文件夾下面又多了一個打好的jar包

          圖片

          4、運行mvn clean,發(fā)現(xiàn)整個target文件夾都沒了。又回到了編譯之前我們手動創(chuàng)建的文件夾

          圖片

          五、倉庫和坐標

          ① pom.xml:Project Object Model 項目對象模型。它是maven的核心配置文件,所有的構(gòu)建的配置都在這里設(shè)置。

          ② 坐標:使用下面的三個向量在倉庫中唯一的定位一個maven工程

          圖片

          ③ maven工程的坐標與倉庫中路徑的關(guān)系:

          maven坐標和倉庫對應(yīng)的映射關(guān)系:[groupId][artifactId][version][artifactId]-[version].jar

          去本地倉庫看一下此目錄:org\springframework\spring-core\4.3.4.RELEASE\spring-core-4.3.4.RELEASE.jar

          果然是完全對應(yīng)的(默認倉庫地址上面說過了哦,不要說不知道在哪,沒事下面我們再說一下倉庫)

          ④ 倉庫

          倉庫的分類:

          1、本地倉庫:當前電腦上的倉庫,路徑上已經(jīng)說過了哦

          2、遠程倉庫:

          • 私服:搭建在局域網(wǎng)中,一般公司都會有私服,私服一般使用nexus來搭建。具體搭建過程可以查詢其他資料

          • 中央倉庫:架設(shè)在Internet上,像剛才的springframework就是在中央倉庫上

          六、依賴

          ① maven解析依賴信息時會到本地倉庫中取查找被依賴的jar包

          • 對于本地倉庫中沒有的會去中央倉庫去查找maven坐標來獲取jar包,獲取到j(luò)ar之后會下載到本地倉庫

          • 對于中央倉庫也找不到依賴的jar包的時候,就會編譯失敗了

          ② 如果依賴的是自己或者團隊開發(fā)的maven工程,需要先使用install命令把被依賴的maven工程的jar包導(dǎo)入到本地倉庫中

          舉例:現(xiàn)在我再創(chuàng)建第二個maven工程HelloFriend,其中用到了第一個Hello工程里類的sayHello(String name)方法。我們在給HelloFriend項目使用 mvn compile命令進行編譯的時候,會提示缺少依賴Hello的jar包。怎么辦呢?

          到第一個maven工程中執(zhí)行 mvn install后,你再去看一下本地倉庫,你會發(fā)現(xiàn)有了Hello項目的jar包。一旦本地倉庫有了依賴的maven工程的jar包后,你再到HelloFriend項目中使用 mvn compile命令的時候,可以成功編譯

          ③ 依賴范圍

          scope就是依賴的范圍

          1、compile, 默認值,適用于所有階段(開發(fā)、測試、部署、運行),本jar會一直存在所有階段。

          2、provided, 只在開發(fā)、測試階段使用,目的是不讓Servlet容器和你本地倉庫的jar包沖突 。如servlet.jar。

          3、runtime, 只在運行時使用,如JDBC驅(qū)動,適用運行和測試階段。

          4、test, 只在測試時使用,用于編譯和運行測試代碼。不會隨項目發(fā)布。

          5、system, 類似provided,需要顯式提供包含依賴的jar,Maven不會在Repository中查找它。推薦:Java進階視頻資源

          七、生命周期

          Maven有三套相互獨立的生命周期,請注意這里說的是“三套”,而且“相互獨立”,初學(xué)者容易將Maven的生命周期看成一個整體,其實不然。這三套生命周期分別是:

          ① Clean Lifecycle 在進行真正的構(gòu)建之前進行一些清理工作。 Clean生命周期一共包含了三個階段:

          • pre-clean 執(zhí)行一些需要在clean之前完成的工作
          • clean 移除所有上一次構(gòu)建生成的文件
          • post-clean 執(zhí)行一些需要在clean之后立刻完成的工作

          ② Default Lifecycle 構(gòu)建的核心部分,編譯,測試,打包,部署等等。

          • validate
          • generate-sources
          • process-sources
          • generate-resources
          • process-resources 復(fù)制并處理資源文件,至目標目錄,準備打包
          • compile 編譯項目的源代碼
          • process-classes
          • generate-test-sources
          • process-test-sources
          • generate-test-resources
          • process-test-resources 復(fù)制并處理資源文件,至目標測試目錄
          • test-compile 編譯測試源代碼
          • process-test-classes
          • test 使用合適的單元測試框架運行測試。這些測試代碼不會被打包或部署
          • prepare-package
          • package 接受編譯好的代碼,打包成可發(fā)布的格式,如 JAR
          • pre-integration-test
          • integration-test
          • post-integration-test
          • verify
          • install 將包安裝至本地倉庫,以讓其它項目依賴。
          • deploy 將最終的包復(fù)制到遠程的倉庫,以讓其它開發(fā)人員與項目共享

          那我們在Hello的項目中執(zhí)行 mvn install 命令,通過日志看看中間經(jīng)歷了什么?

          圖片

          通過日志我們發(fā)現(xiàn),其實執(zhí)行mvn install,其中已經(jīng)執(zhí)行了compile 和 test 。

          總結(jié): 不論你要執(zhí)行生命周期的哪一個階段,maven都是從這個生命周期的開始執(zhí)行

          插件: 每個階段都有插件(plugin),看上面標紅的。插件的職責就是執(zhí)行它對應(yīng)的命令。

          ③ Site Lifecycle 生成項目報告,站點,發(fā)布站點。

          • pre-site 執(zhí)行一些需要在生成站點文檔之前完成的工作
          • site 生成項目的站點文檔
          • post-site 執(zhí)行一些需要在生成站點文檔之后完成的工作,并且為部署做準備
          • site-deploy 將生成的站點文檔部署到特定的服務(wù)器上

          八、Eclipse中使用maven

          ①、配置

          選擇菜單windows-->preferences(參數(shù))-->maven

          選擇Installations(安裝),添加你自己下載并解壓好的maven目錄。并打上對勾 √,點擊Apply(應(yīng)用)

          圖片

          再選擇User Settings目錄,在User Settings中選擇Browse(瀏覽),選擇你自己maven里的conf下的settings.xml文件。

          圖片

          插一句:settings.xml這個配置文件,主要是配置你本地倉庫的路徑的。不想使用默認路徑,就打開文件,加上自己的路徑配置。

          <localRepository>C:\Program Files\Java\repository</localRepository>  

          到此,maven整個的設(shè)置就OK了。

          ② 使用Eclipse創(chuàng)建maven的Web工程

          1、選擇菜單File-->new -->project,輸入maven

          圖片

          選擇Maven Project,點擊Next

          圖片

          點擊Next

          圖片

          輸入webapp,選中第一項,點擊next

          圖片

          項目就創(chuàng)建完成了,但是jdk的版本還有sevlet-api等jar包還沒有

          圖片

          選擇創(chuàng)建好的工程單擊右鍵,選擇properties 并找到 Java Build Path,把jdk的版本選擇你電腦上的正確的jdk版本。

          圖片

          選擇創(chuàng)建好的工程單擊右鍵,選擇properties 并找到 Project Facets,版本選擇3.1,下面的java版本選擇1.8,點擊Apply

          圖片

          選擇創(chuàng)建好的工程單擊右鍵,找到build path

          圖片

          找到Libaries,添加Tomcat8.5的依賴庫,點擊OK

          圖片

          九、maven工程的依賴高級特性

          ① 依賴的傳遞性

          WebMavenDemo項目依賴JavaMavenService1 JavaMavenService1項目依賴JavaMavenService2

          pom.xml文件配置好依賴關(guān)系后,必須首先mvn install后,依賴的jar包才能使用。

          • WebMavenDemo的pom.xml文件想能編譯通過,JavaMavenService1必須mvn install
          • JavaMavenService的pom.xml文件想能編譯通過,JavaMavenService2必須mvn install

          傳遞性:

          在Eclipse中,為JavaMavenService2中增加了一個spring-core.jar包后,會驚喜的發(fā)現(xiàn)依賴的兩個項目都自動的增加了這個jar包,這就是依賴的傳遞性。推薦:Java進階視頻資源

          注意:非compile范圍的依賴是不能傳遞的。

          ② 依賴版本的原則:

          1、路徑最短者優(yōu)先原則

          Service2的log4j的版本是1.2.7版本,Service1排除了此包的依賴,自己加了一個Log4j的1.2.9的版本,那么WebMavenDemo項目遵守路徑最短優(yōu)先原則,Log4j的版本和Sercive1的版本一致。

          2、路徑相同先聲明優(yōu)先原則

          這種場景依賴關(guān)系發(fā)生了變化,WebMavenDemo項目依賴Sercive1和Service2,它倆是同一個路徑,那么誰在WebMavenDemo的pom.xml中先聲明的依賴就用誰的版本。

          ③ 統(tǒng)一管理依賴的版本:

          為了統(tǒng)一管理版本號,可以使用properties標簽,里面可以自定義版本的標簽名。在使用的地方使用${自定義標簽名}

          十、build配置

          <build>  
            <!-- 項目的名字 -->  
            <finalName>WebMavenDemo</finalName>  
            <!-- 描述項目中資源的位置 -->  
            <resources>  
              <!-- 自定義資源1 -->  
              <resource>  
                <!-- 資源目錄 -->  
                <directory>src/main/java</directory>  
                <!-- 包括哪些文件參與打包 -->  
                <includes>  
                  <include>**/*.xml</include>  
                </includes>  
                <!-- 排除哪些文件不參與打包 -->  
                <excludes>  
                  <exclude>**/*.txt</exclude>  
                    <exclude>**/*.doc</exclude>  
                </excludes>  
              </resource>  
            </resources>  
            <!-- 設(shè)置構(gòu)建時候的插件 -->  
            <plugins>  
              <plugin>  
                <groupId>org.apache.maven.plugins</groupId>  
                <artifactId>maven-compiler-plugin</artifactId>  
                <version>2.1</version>  
                <configuration>  
                  <!-- 源代碼編譯版本 -->  
                  <source>1.8</source>  
                  <!-- 目標平臺編譯版本 -->  
                  <target>1.8</target>  
                </configuration>  
              </plugin>  
              <!-- 資源插件(資源的插件) -->    
              <plugin>    
                <groupId>org.apache.maven.plugins</groupId>    
                <artifactId>maven-resources-plugin</artifactId>    
                <version>2.1</version>    
                <executions>    
                  <execution>    
                    <phase>compile</phase>    
                  </execution>    
                </executions>    
                <configuration>    
                  <encoding>UTF-8</encoding>    
                </configuration>   
              </plugin>  
              <!-- war插件(將項目打成war包) -->    
              <plugin>    
                <groupId>org.apache.maven.plugins</groupId>    
                <artifactId>maven-war-plugin</artifactId>    
                <version>2.1</version>    
                <configuration>  
                  <!-- war包名字 -->    
                  <warName>WebMavenDemo1</warName>  
                </configuration>    
              </plugin>    
            </plugins>  
          </build>  

          配置好build后,執(zhí)行mvn package之后,在maven工程指定的target目錄里war包和文件都按照配置的生成了

          圖片

          好了,maven的所有的內(nèi)容就整理完了。

          最后推薦個最新最全的maven依賴項版本查詢網(wǎng)站:

          http://mvnrepository.com/

          感謝閱讀,希望對你有所幫助 :) 

          來源:cnblogs.com/hzg110/p/6936101.html


          推薦閱讀:

          世界的真實格局分析,地球人類社會底層運行原理

          不是你需要中臺,而是一名合格的架構(gòu)師(附各大廠中臺建設(shè)PPT)

          企業(yè)IT技術(shù)架構(gòu)規(guī)劃方案

          論數(shù)字化轉(zhuǎn)型——轉(zhuǎn)什么,如何轉(zhuǎn)?

          華為干部與人才發(fā)展手冊(附PPT)

          企業(yè)10大管理流程圖,數(shù)字化轉(zhuǎn)型從業(yè)者必備!

          【中臺實踐】華為大數(shù)據(jù)中臺架構(gòu)分享.pdf

          華為的數(shù)字化轉(zhuǎn)型方法論

          華為如何實施數(shù)字化轉(zhuǎn)型(附PPT)

          超詳細280頁Docker實戰(zhàn)文檔!開放下載

          華為大數(shù)據(jù)解決方案(PPT)

          瀏覽 59
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  女人黄色A级毛片 | 国产成人女自拍 | 丁香五月激情网 | 一道本无码免费 | 国产又粗又长又黄又爽网站 |