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

          共 5266字,需瀏覽 11分鐘

           ·

          2023-07-31 20:24

          Maven

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

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

          創(chuàng)建A項目后,選擇IDEA最右側(cè)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開始,為了盡可能避免構(gòu)建的不確定性,maven定義了依賴調(diào)解的第二原則:第一聲明者優(yōu)先。在依賴路徑長度相等的前提下,在POM中依賴聲明的順序決定了誰會被解析使用。順序最靠前的那個依賴優(yōu)勝。

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

          img

          繼承關系:

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

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


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

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

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

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

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

          前提:繼承。

          聚合包含了繼承的特性。

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

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

          常見插件

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

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

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

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

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

            再點進去就可以看到結(jié)果了,頂級的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繼承的依賴版本,只需要在引入依賴的時候指定具體的依賴版本即可.

          maven的pom.xml中repositories的作用

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

          <repositories>

          <repository>

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

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

          </repository>

          </repositories>


          瀏覽 232
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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>
                  青春草精品在线 | 日韩欧美伊人 | 色悠久久综合 | 狠狠狠草| 五月深深爱亭亭 |