1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Maven版本控制

        共 4842字,需瀏覽 10分鐘

         ·

        2023-05-08 08:40

        Maven

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

        如果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定義了依賴調(diào)解的第二原則:第一聲明者優(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>中的內(nèi)容時不被子項目繼承,不可以直接使用

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

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

        d9167bde5491105be0ba61e2303a2d71.webp

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

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

        前提:繼承。

        聚合包含了繼承的特性。

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

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

        f5e0eea8f08391168f287ffeb9746e6f.webpb81c3a9e24d911381042c689b3891594.webp

        常見插件

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

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

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

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

        9157128f17493eef075d775fcf0eedbf.webpcf822200091ef1bdadb905d9131bde34.webp

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

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

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

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

        • 現(xiàn)在有這樣一個場景,有兩個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ā)現(xiàn)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 的繼承關系,引入依賴的版本,從而完成版本的統(tǒng)一。 另外不是所有依賴都在parent中指定了版本,對于沒有指定版本的依賴依然需要手動指定版本否則會出現(xiàn)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
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

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

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            久久久无码成人 | 岳的两片蚌肉缓缓张开乡村欲爱 | 亚洲天堂在线免费观看视频 | 欧美一级特黄A片 | 亚洲精品99久久久久中文字幕 | 亚洲国产91 | 99re这里只有精品在线观看 | 青草资源网| 三级黄色片 | 国产麻豆精品成人毛片 |