理解maven項目的pom.xml文件中, 標簽的作用——作用域以及依賴傳遞


問題介紹:

  在maven項目中,最關鍵的就是pom.xml這個文件,這個文件是用來導入maven項目依賴的jar包以及一些插件等。

  在這個文件中導入jar包使用的標簽是<dependency>,而在這個標簽下有一個子標簽,叫做<scope>,它是有什么用處呢?下面我就來講講它的作用。

      

 

 

內容講解:

  <scope>這個標簽的主要作用有三個:

     1、確定導入的jar包的有效區域。這里說的區域分別為:

      a)主程序區域:

        

      b)測試程序區域:

        

 

     2、是否參與maven項目的打包:

    項目要部署到服務器上,是需要先將項目打包的。然而,並不是你導入項目的所有Jar包都需要一同被打包,比如junit這個專門用來編寫測試的包及其依賴,就沒有必要一起打包進項目中。使用scope的不同取值就能告訴maven哪些jar包需要被一同打包,哪些不用。

 

  <scope>標簽的取值(只介紹主要的三種):

    1、compile(默認)

      導入的jar對主程序是否有效:有效

      導入的jar對測試程序是否有效:有效

      是否參與項目的打包:參與

      例如:在maven項目中使用了sping等第三方的jar包,則需要一同打包再部署到服務器。

 

    2、test  

      導入的jar對主程序是否有效:無效

      導入的jar對測試程序是否有效:有效

      是否參與項目的打包:參與

      例如:junit包,只在開發中測試使用,並不需要打包到服務器。

      注:在eclipse中,若<scope>的取值若為test,則在右側目錄中,包會顯示為灰色。如下圖:

 

    3、provided

      導入的jar對主程序是否有效:有效

      導入的jar對測試程序是否有效:有效

      是否參與項目打包:不參與

      例如:servlet-api,tomcat服務器自帶,會自動添加到你部署的項目中,你開發項目時要用嗎,但是不需

         要一起打包。

 

 

 注意:

  <scope>中的值不能隨便亂寫,需要合理的選擇,否則程序可能會出現錯誤。比如說,如果在導入一些Tomcat服務器自帶的依賴(如:servlet-api)時使用了compile這個取值,項目運行時就會產生錯誤,因為Tomcat自帶這些依賴,而你還將自己額外加入的相同的依賴部署到Tomcat下,兩者就會差生沖突。而若是你在導入一些Tomcat沒有但程序運行時需要的依賴時,使用了test或者provided,也會出錯,因為這些依賴將不會一起被打包部署到Tomcat下,運行時就將找不到這些依賴。

 

 

scope對依賴傳遞的影響

  什么是依賴傳遞?

  就是假設你有一個maven項目叫A,你在這個項目中添加了一個依賴,這個依賴是你的另一個maven項目B,你在這個被依賴的項目B中添加一些依賴,這些依賴也會自動地添加到A中,這就是依賴傳遞。簡單來說就是你的依賴的依賴也會成為你的依賴。

  

  <scope>標簽的取值對依賴傳遞有什么影響呢?

  這個影響就是,只有當依賴的scope標簽被定義為compile時才會發生依賴傳遞,而定義為test或者provided都不會發生依賴傳遞。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM