<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版本控制

          共 4842字,需瀏覽 10分鐘

           ·

          2023-05-08 08:40

          Maven

          傳遞性依賴是Maven2.0的新特性。假設你的項目依賴于一個庫,而這個庫又依賴于其他庫。你不必自己去找出所有這些依賴,你只需要加上你直接依賴的庫,Maven會隱式的把這些庫間接依賴的庫也加入到你的項目中。這個特性是靠解析從遠程倉庫中獲取的依賴庫的項目文件實現的。一般的,這些項目的所有依賴都會加入到項目中,或者從父項目繼承,或者通過傳遞性依賴。

          如果A依賴了B,那么C依賴A時會自動把A和B都導入進來。

          7fcb8d57a69536adb0a7f45aea84830b.webp

          創(chuàng)建A項目后,選擇IDEA最右側Maven面板lifecycle,雙擊install后就會把項目安裝到本地倉庫中,其他項目就可以通過坐標引用此項目。

          【1】第一原則:最短路徑優(yōu)先原則

          “最短路徑優(yōu)先”意味著項目依賴關系樹中路徑最短的版本會被使用。

          例如,假設A、B、C之間的依賴關系是A->B->C->D(2.0) ?和A->E->(D1.0),那么D(1.0)會被使用,因為A通過E到D的路徑更短。

          【2】第二原則:最先聲明原則

          依賴路徑長度是一樣的的時候,第一原則不能解決所有問題,比如這樣的依賴關系:A–>B–>Y(1.0),A–>C–>Y(2.0),Y(1.0)和Y(2.0)的依賴路徑長度是一樣的,都為2。那么到底誰會被解析使用呢?在maven2.0.8及之前的版本中,這是不確定的,但是maven2.0.9開始,為了盡可能避免構建的不確定性,maven定義了依賴調解的第二原則:第一聲明者優(yōu)先。在依賴路徑長度相等的前提下,在POM中依賴聲明的順序決定了誰會被解析使用。順序最靠前的那個依賴優(yōu)勝。

          exclusions: 用來排除傳遞性依賴 其中可配置多個exclusion標簽,每個exclusion標簽里面對應的有groupId, artifactId, version三項基本元素。注意:不用寫版本號 ? ? 比如:A--->B--->C (Mybatis.jar) 排除C中的Mybatis.jar

          fea7f4cefc97bcc7cd06218431e54459.webpimg

          繼承關系:

          如果A工程繼承B工程,則代表A工程默認依賴B工程依賴的所有資源,且可以應用B工程中定義的所有資源信息。

          被繼承的工程(B工程)只能是POM工程。


          在父項目中放在<dependencyManagement>中的內容時不被子項目繼承,不可以直接使用

          放在<dependencyManagement>中的內容主要目的是進行版本管理。里面的內容在子項目中依賴時坐標只需要填寫

          <group id><artifact id>即可。(注意:如果子項目不希望使用父項目的版本,可以明確配置version)。

          d9167bde5491105be0ba61e2303a2d71.webp

          當我們開發(fā)的工程擁有2個以上模塊的時候,每個模塊都是一個獨立的功能集合。比如某大學系統中擁有搜索平臺,學習平臺,考試平臺等。開發(fā)的時候每個平臺都可以獨立編譯,測試,運行。這個時候我們就需要一個聚合工程。

          在創(chuàng)建聚合工程的過程中,總的工程必須是一個POM工程(Maven Project)(聚合項目必須是一個pom類型的項目,jar項目war項目是沒有辦法做聚合工程的),各子模塊可以是任意類型模塊(Maven Module)。

          前提:繼承。

          聚合包含了繼承的特性。

          聚合時多個項目的本質還是一個項目。這些項目被一個大的父項目包含。且這時父項目類型為pom類型。同時在父項目的pom.xml中出現表示包含的所有子模塊。

          總項目:一般總項目:POM項目

          f5e0eea8f08391168f287ffeb9746e6f.webpb81c3a9e24d911381042c689b3891594.webp

          常見插件

          • 通過編譯器插件,我們可以配置使用的JDK或者說編譯器的版本
          • settings.xml文件中配置全局編譯器插件:
          7abe753297199c047fe8929a319797cc.webp95c8a8af235d166053c8a51707927b1c.webp

          Maven在打包時默認只將src/main/resources里的配置文件拷貝到項目中并做打包處理,而非resource目錄下的配置文件在打包時不會添加到項目中。

          我們的配置文件,一般都放在:src/main/resources

          然后打包后配置文件就會在target的classes下面放著:

          9157128f17493eef075d775fcf0eedbf.webpcf822200091ef1bdadb905d9131bde34.webp

          現在學習一個新的方式,不再依賴外部的tomcat,maven提供了tomcat插件,我們可以配置來使用。

          創(chuàng)建web項目:war項目:

          maven項目pom.xml中parent標簽的使用

          使用maven是為了更好的幫項目管理包依賴,maven的核心就是pom.xml。當我們需要引入一個jar包時,在pom文件中加上就可以從倉庫中依賴到相應的jar包。

          • 現在有這樣一個場景,有兩個web項目A、B,一個java項目C,它們都需要用到同一個jar包:common.jar。如果分別在三個項目的pom文件中定義各自對common.jar的依賴,那么當common.jar的版本發(fā)生變化時,三個項目的pom文件都要改,項目越多要改的地方就越多,很麻煩。這時候就需要用到parent標簽, 我們創(chuàng)建一個parent項目,打包類型為pom,parent項目中不存放任何代碼,只是管理多個項目之間公共的依賴。在parent項目的pom文件中定義對common.jar的依賴,ABC三個子項目中只需要定義,parent標簽中寫上parent項目的pom坐標就可以引用到common.jar了。

          • 我們在切換一個場景,有一個springmvc.jar,只有AB兩個web項目需要,C項目是java項目不需要,那么又要怎么去依賴。如果AB中分別定義對springmvc.jar的依賴,當springmvc.jar版本變化時修改起來又會很麻煩。解決辦法是在parent項目的pom文件中使用將springmvc.jar管理起來,如果有哪個子項目要用,那么子項目在自己的pom文件中使用

          標簽中寫上springmvc.jar的坐標,不需要寫版本號,可以依賴到這個jar包了。這樣springmvc.jar的版本發(fā)生變化時只需要修改parent中的版本就可以了。

          springboot為什么引入一些依賴時不需要指定版本

          • 其實在Spring Boot 項目下的pom.xml文件中通常都會有一個標簽,用來指定繼承的父pom

                        
                        ?<parent>
            ????????<groupId>org.springframework.boot</groupId>
            ????????<artifactId>spring-boot-starter-parent</artifactId>
            ????????<version>1.5.10.RELEASE</version>
            ????????<relativePath/>
            ????</parent>

            其實在Spring Boot 項目下的pom.xml文件中通常都會有一個標簽,用來指定繼承的父pom,如下::

                        
                        ?<parent>
            ????????<groupId>org.springframework.boot</groupId>
            ????????<artifactId>spring-boot-dependencies</artifactId>
            ????????<version>1.5.10.RELEASE</version>
            ????????<relativePath>../../spring-boot-dependencies</relativePath>
            ????</parent>

            點進去后會發(fā)現spring-boot-starter-parent也繼承自一個pom,如下:

                        
                        ?<parent>
            ????????<groupId>org.springframework.boot</groupId>
            ????????<artifactId>spring-boot-dependencies</artifactId>
            ????????<version>1.5.10.RELEASE</version>
            ????????<relativePath>../../spring-boot-dependencies</relativePath>
            ????</parent>

            再點進去就可以看到結果了,頂級的pom文件的坐標如下,通過標簽我們應該知道這個pom文件時用來管理依賴版本號的。

                        
                        ??<groupId>org.springframework.boot</groupId>
            ????<artifactId>spring-boot-dependencies</artifactId>
            ????<version>1.5.10.RELEASE</version>
            ????<packaging>pom</packaging>

            在這個pom.xml中定義了很多的標簽用來管理引入依賴和插件的版本。 在引入依賴的時候,即使你不指定依賴的版本,Spring Boot 也會通過Maven 的繼承關系,引入依賴的版本,從而完成版本的統一。 另外不是所有依賴都在parent中指定了版本,對于沒有指定版本的依賴依然需要手動指定版本否則會出現No version of dendency的異常 當然你也可以不使用Maven繼承的依賴版本,只需要在引入依賴的時候指定具體的依賴版本即可.

          f5bff0eca0c42bea6032b3979ba0bea5.webp

          maven的pom.xml中repositories的作用

          在pom.xml中repositories標簽的作用是用來配置maven項目的遠程倉庫。示例如下:

                <repositories>

          <repository>

          <id>遠程倉庫唯一標識符</id>

          <url>遠程倉庫的url</url>

          </repository>

          </repositories>


          瀏覽 136
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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>
                  国产大片无码内射 | 91精品91久久久中77777 | 四虎影院永久在线 | 久久成人精品电影 | 麻豆网站|