<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>

          Maven學(xué)習(xí)總結(jié)

          共 5063字,需瀏覽 11分鐘

           ·

          2020-08-21 09:38

          點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號(hào)”

          優(yōu)質(zhì)文章,第一時(shí)間送達(dá)

          ? 作者?|??又要起名字呀?

          來源 | urlify.cn/Vfm2mi

          66套java從入門到精通實(shí)戰(zhàn)課程分享


          一、Maven概念

          一個(gè)?基于Java平臺(tái)?的?自動(dòng)化構(gòu)建工具?,幫助我們管理jar包和拆分項(xiàng)目,其他類似的構(gòu)建工具有 make-ant-maven-gradle。

          基于Java平臺(tái):安裝maven前一定要配置好JDK環(huán)境。

          自動(dòng)化構(gòu)建工具:eclipse就是自動(dòng)化構(gòu)建工具,幫助我們把java編譯為class文件。

          二、Maven安裝

          (1)下載JDK并配置環(huán)境變量。

          (2)下載maven(http://maven.apache.org/download.cgi)。

          (3)解壓安裝包,并配置maven環(huán)境變量。

            a、配置MAVEN_HOME : D:\apache-maven-3.6.3\bin

            b、配置path:%MAVEN_HOME%\bin

          命令行窗口下用?mvn -v?驗(yàn)證安裝是否成功。

          以上三步就已經(jīng)成功安裝了maven,但為了讓你的maven使用經(jīng)歷更加暢快,你還需要做出以下一些小修改。

          (1)增加Maven鏡像

            Maven 倉庫默認(rèn)在國外, 國內(nèi)使用難免很慢,我們可以更換為阿里云的倉庫。

            Maven安裝目錄下,找 conf ----->settings.xml,在?mirrors?標(biāo)簽下加入下面內(nèi)容



          ?????????
          ?????????<id>nexus-aliyunid>
          ?????????<mirrorOf>*mirrorOf>
          ?????????<name>Nexus aliyunname>
          ?????????<url>http://maven.aliyun.com/nexus/content/groups/publicurl>
          mirror>


          (2)修改本地倉庫位置

            Maven默認(rèn)本地倉庫地址在C盤,隨著項(xiàng)目的增加,這無疑會(huì)使得C盤變的臃腫,可以修改C盤的路徑。

            Maven安裝目錄下,找 conf ----->settings.xml,修改?localRepository?標(biāo)簽中的地址到你開心的位置。

          <localRepository>F:/soft/MVN_repositorylocalRepository>


          (3)修改IDE的配置,使本地倉庫生效

            Eclipse:Windows---->Preferences---->Maven---->User Settings---->Global Settings選擇你之前配置的settings.xml

            Idea:File---->Settings---->Maven---->User settings file選擇你之前配置的settings.xml

          三、Maven常用命令

          安裝完成后,不要先著急使用,還有一些知識(shí)需要你進(jìn)行了解,以便于你更好的使用Maven。

          Maven生命周期總的來分為clean,build,site三大部分,其中build又依次包括validate--->compile--->Test--->package--->verify--->install--->deploy,本篇文章比較偏向于實(shí)踐,具體的生命周期的知識(shí)筆者不再贅述(生命周期的知識(shí)比較偏理論,但也挺重要的,還是希望大家自行了解下,https://www.runoob.com/maven/maven-build-life-cycle.html),生命周期的一些階段對(duì)應(yīng)著Maven的一些常用命令,

          命令描述
          mvn clean刪除target目錄(刪除編譯文件的目錄)
          mvn compile只編譯main目錄中的java文件
          mvn test執(zhí)行test目錄下的測(cè)試用例
          mvn package將編譯后的代碼打包成可分發(fā)格式的文件,比如JAR、WAR或者EAR文件。
          mvn install安裝項(xiàng)目包到本地倉庫,這樣項(xiàng)目包可以用作其他本地項(xiàng)目的依賴

          值得注意的是,每一個(gè)命令執(zhí)行時(shí),該命令之前以及包括該命令在內(nèi)的所有命令都會(huì)被執(zhí)行,比如執(zhí)行了mvn install,前邊的五條命令也都會(huì)被執(zhí)行。

          四、POM文件

          為了方便理解,先對(duì)常見的pom文件結(jié)構(gòu)進(jìn)行講解,掌握了下邊的文件結(jié)構(gòu),基本上你就可以關(guān)掉本篇博文,使用maven進(jìn)行開發(fā)了,但如果你對(duì)此并不滿足,可以繼續(xù)向下看。

          <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 https://maven.apache.org/xsd/maven-4.0.0.xsd">

          ?????
          ?????<modelVersion>4.0.0modelVersion>
          ?????
          ?????<groupId>com.liu.learninggroupId>
          ?????
          ?????<artifactId>HelloWorld01artifactId>
          ?????
          ?????<version>0.0.1-SNAPSHOTversion>
          ?????
          ?????<name>HelloWorld01name>
          ?????
          ?????<packaging>jarpackaging>
          ?????
          ?????<description>hello worlddescription>
          ?
          ?????
          ?????<profiles>
          ?????????<profile>
          ?????????????<id>jdk-1.8id>
          ?????????????<activation>
          ?????????????????<activeByDefault>trueactiveByDefault>
          ?????????????????<jdk>1.8jdk>
          ?????????????activation>
          ?????????????<properties>
          ?????????????????<maven.compiler.source>1.8maven.compiler.source>
          ?????????????????<maven.compiler.target>1.8maven.compiler.target>
          ?????????????????<maven.compiler.compilerVersion>1.8maven.compiler.compilerVersion>
          ?????????????properties>
          ?????????profile>
          ?????profiles>
          ?
          ?????<dependencies>
          ?????????
          ?????????<dependency>
          ?????????????<groupId>junitgroupId>
          ?????????????<artifactId>junitartifactId>
          ?????????????<version>4.12version>
          ?????????????
          ?????????????<scope>testscope>
          ?????????dependency>
          ?????dependencies>
          ?project>


          五、jar包的作用范圍scope

          常用的三個(gè)分別是compile,test,provided 作用范圍如下表:

          階段 \ scopecompiletestprovided
          編譯×
          測(cè)試
          部署(運(yùn)行)××

          1、compile

            缺省值,如果不顯式聲明默認(rèn)為compile,適用于所有階段,會(huì)隨著項(xiàng)目一起發(fā)布。

          2、test

            jar包只在測(cè)試階段需要,常見的jar比如說junit

          3、provided

            jar包只在編譯和測(cè)試時(shí)需要,這種比較少見,比如說servlet-api.jar,編譯和測(cè)試時(shí)需要servlet 環(huán)境,但運(yùn)行時(shí)由tomcat提供servlet環(huán)境,就不需要servlet-api.jar了

          六、Maven依賴與依賴排除

          1、Maven自動(dòng)引入依賴

          假如說我們需要用到A.jar,但是A.jar中又用到了B.jar,Maven會(huì)自動(dòng)幫我們引入B.jar,最常見的例子就是spring-context.jar 了,大家可以自行嘗試將下邊依賴引入,Maven不僅會(huì)將spring-context.jar引入,還會(huì)將spring-aop.jar,spring-beans.jar等其他jar包一并引入。

          <dependency>
          ?????????????<groupId>org.springframeworkgroupId>
          ?????????????<artifactId>spring-contextartifactId>
          ?????????????<version>5.2.6.RELEASEversion>
          ?dependency>


          ?2、依賴排除的兩種方案

          但如果我們確實(shí)用不到其他jar但Maven又幫我們引入了,那該怎們辦呢?


          ?<dependency>
          ?????????????<groupId>org.springframeworkgroupId>
          ?????????????<artifactId>spring-contextartifactId>
          ?????????????<version>5.2.6.RELEASEversion>
          ?????????????<exclusions>
          ?????????????????<exclusion>
          ?????????????????????<groupId>org.springframeworkgroupId>
          ?????????????????????<artifactId>spring-coreartifactId>
          ?????????????????exclusion>
          ?????????????????<exclusion>
          ?????????????????????<groupId>org.springframeworkgroupId>
          ?????????????????????<artifactId>spring-beansartifactId>
          ?????????????????exclusion>
          ?????????????????<exclusion>
          ?????????????????????<groupId>org.springframeworkgroupId>
          ?????????????????????<artifactId>spring-aopartifactId>
          ?????????????????exclusion>
          ?????????????exclusions>
          ?dependency>
          ?
          ?
          ?
          ?<dependency>
          ?????????????<groupId>org.springframeworkgroupId>
          ?????????????<artifactId>spring-contextartifactId>
          ?????????????<version>5.2.6.RELEASEversion>
          ?????????????<exclusions>
          ?????????????????<exclusion>
          ?????????????????????<groupId>*groupId>
          ?????????????????????<artifactId>*artifactId>
          ?????????????????exclusion>
          ?????????????exclusions>
          ?dependency>


          七、Maven依賴傳遞與依賴原則

          1、依賴傳遞

          在數(shù)學(xué)上,若A依賴于B,B依賴于C,那么A依賴于C成立,但在Maven中還需要添加一個(gè)條件,要使 A.jar依賴于C.jar,當(dāng)且僅當(dāng) B.jar 依賴于C.jar的范圍是compile

          創(chuàng)建maven項(xiàng)目A,B,其中B中引入junit.jar,然后將B用mvn install安裝到本地倉庫,再將B引入到A,改變junit的scope觀察A中是否引入junit。

          實(shí)驗(yàn)過程如上,讀者可自行實(shí)驗(yàn)。

          2、依賴原則

          我們?cè)賮砜聪逻吶齻€(gè)案例,

          (1)同一POM中引入同一jar包的不同版本時(shí)(不推薦這樣做),會(huì)使用哪個(gè)版本呢?

          (2)項(xiàng)目A->B,B->junit.jar(scope為compile),同時(shí)A->junit.jar,那么A中又會(huì)使用哪個(gè)jar呢?

          (3)項(xiàng)目A依賴B和C,B和C都依賴了不同版本的junit.jar(scope為compile),那么A中會(huì)使用哪個(gè)jar呢?

          前兩個(gè)很好猜,第一個(gè)pom文件寫在后邊的jar會(huì)覆蓋前邊的jar。第二個(gè)會(huì)選擇離自己最近的jar,也就是A中自己的jar。第三個(gè)同時(shí)也遵循 離自己最近的原則,但是兩者距離一樣,那怎么辦呢?POM文件中對(duì)B和C的依賴聲明總有先后順序吧,那就采用先聲明那個(gè)中的jar。

          我們拋去第一個(gè)案例(開發(fā)中嚴(yán)禁這樣做),來總結(jié)下規(guī)則:

          (1)路徑最近者優(yōu)先。

          (2)第一聲明者優(yōu)先。

          八、Maven依賴?yán)^承

          1、父項(xiàng)目


          ?<packaging>pompackaging>
          ?
          ?<dependencyManagement>
          ?????????<dependencies>
          ?????????????<dependency>
          ?????????????????<groupId>junitgroupId>
          ?????????????????<artifactId>junitartifactId>
          ?????????????????<version>4.12version>
          ?????????????????<scope>compilescope>
          ?????????????dependency>
          ?????????dependencies>
          ?dependencyManagement>


          2、子項(xiàng)目


          ?<parent>
          ?????????<groupId>com.liu.learinggroupId>
          ?????????<artifactId>parentartifactId>
          ?????????<version>0.0.1-SNAPSHOTversion>
          ??????????
          ?????????
          ?????????<relativePath>../parent/pom.xmlrelativePath>
          ?parent>
          ?
          ?
          ?<dependencies>
          ?????????<dependency>
          ?????????????<groupId>junitgroupId>
          ?????????????<artifactId>junitartifactId>
          ?????????dependency>
          ?dependencies>


          九、項(xiàng)目聚合

          Maven項(xiàng)目能夠識(shí)別自身和本地倉庫中的項(xiàng)目,如果項(xiàng)目A依賴項(xiàng)目B,必須要把項(xiàng)目B進(jìn)行打包安裝放入本地倉庫,然后再在項(xiàng)目A中引入才能使用。但是如果項(xiàng)目A依賴很多個(gè)其他項(xiàng)目,這樣一一打包安裝就比較麻煩了,這就引出了“聚合”。


          ?<packaging>pompackaging>
          ?
          ??
          ?<modules>
          ?????????<module>../onemodule>
          ?????????<module>../twomodule>
          ?modules>

          ?


          十、統(tǒng)一管理版本

          有時(shí)候開發(fā)項(xiàng)目過程會(huì)遇到版本號(hào)統(tǒng)一升級(jí)的問題,例如junit版本從3.0版本升級(jí)成4.12版?這個(gè)時(shí)候有兩個(gè)處理辦法

          1、原始方案

          在pom文件里統(tǒng)一 ctrl+f 搜索替換一下。

          2、高級(jí)方案

          使用pom里的properties標(biāo)簽,自定義一個(gè)?xxx?標(biāo)簽,標(biāo)簽內(nèi)就是版本號(hào),在需要使用的地方使用?${xxx}?靈活取出上面定義的值,這個(gè)樣子就不用那樣修改多個(gè)地方啦!

          <properties>
          ?????????<junit>4.12junit>
          ??properties>
          ?
          ?????<dependencies>
          ?????????<dependency>
          ?????????????<groupId>junitgroupId>
          ?????????????<artifactId>junitartifactId>
          ?????????????<version>${junit}version>
          ?????????????<scope>compilescope>
          ?????????dependency>
          ?????dependencies>





          ??? ?




          感謝點(diǎn)贊支持下哈?

          瀏覽 77
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  亚洲男女操逼 | 超碰在线免费成人午夜剧场97 | 九九国产| 蜜桃久久精品成人无码AV | 中国久久精品 |