久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

【Maven用戶手冊】Maven依賴關(guān)系

 jasonbetter 2017-06-05
http://blog.csdn.net/moshenglv/article/details/52027191

在maven的管理體系中,各個項目組成了一個復(fù)雜的關(guān)系網(wǎng),,但是每個項目都是平等的,,是個沒有貴賤高低,,眾生平等的世界,,全球每個項目從理論上來說都可以相互依賴。就是說,,你跟開發(fā)spring的大牛們平起平坐,,你的項目可以依賴Spring項目,Spring項目也可以依賴你的項目(雖然現(xiàn)實中不太會發(fā)生,,你倒貼錢人家也不敢引用),。

項目的依賴關(guān)系主要分為三種:依賴,繼承,,聚合


依賴關(guān)系

依賴關(guān)系是最常用的一種,,就是你的項目需要依賴其他項目,比如Apache-common包,,Spring包等等,。

[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <dependency>  
  2.                <groupId>junit</groupId>  
  3.                <artifactId>junit</artifactId>  
  4.                <version>4.11</version>  
  5.                <scope>test</scope>  
  6.                <type >jar</ type >  
  7.                <optional >true</ optional >  
  8.  </dependency>  

任意一個外部依賴說明包含如下幾個要素:groupId, artifactId, version, scope, type, optional。其中前3個是必須的,。

這里的version可以用區(qū)間表達式來表示,,比如(2.0,)表示>2.0,[2.0,3.0)表示2.0<=ver<3.0,;多個條件之間用逗號分隔,,比如[1,3],[5,7]。

type 一般在pom引用依賴時候出現(xiàn),,其他時候不用,。

maven認(rèn)為,程序?qū)ν獠康囊蕾嚂S著程序的所處階段和應(yīng)用場景而變化,,所以maven中的依賴關(guān)系有作用域(scope)的限制,。在maven中,scope包含如下的取值:

Scope選項

compile(編譯范圍)

compile是默認(rèn)的范圍,;如果沒有提供一個范圍,,那該依賴的范圍就是編譯范圍。編譯范圍依賴在所有的classpath中可用,,同時它們也會被打包,。

provided(已提供范圍)

provided依賴只有在當(dāng)JDK或者一個容器已提供該依賴之后才使用。例如,,如果你開發(fā)了一個web應(yīng)用,,你可能在編譯classpath中需要可用 的Servlet API來編譯一個servlet,但是你不會想要在打包好的WAR中包含這個Servlet API,;這個Servlet API JAR由你的應(yīng)用服務(wù)器或者servlet容器提供,。已提供范圍的依賴在編譯classpath(不是運行時)可用。它們不是傳遞性的,也不會被打包,。

runtime(運行時范圍)

runtime依賴在運行和測試系統(tǒng)的時候需要,,但在編譯的時候不需要。比如,,你可能在編譯的時候只需要JDBC API JAR,而只有在運行的時候才需要JDBC驅(qū)動實現(xiàn),。

test(測試范圍)

test范圍依賴在編譯和運行時都不需要,,它們只有在測試編譯和測試運行階段可用。

system(系統(tǒng)范圍)

system范圍依賴與provided類似,,但是你必須顯式的提供一個對于本地系統(tǒng)中JAR文件的路徑,。這么做是為了允許基于本地對象編譯,而這些對象 是系統(tǒng)類庫的一部分,。這樣的構(gòu)件應(yīng)該是一直可用的,,Maven也不會在倉庫中去尋找它。 如果你將一個依賴范圍設(shè)置成系統(tǒng)范圍,,你必須同時提供一個systemPath元素 ,。注意該范圍是不推薦使用的(應(yīng)該一直盡量去從公共或定制的Maven倉庫中引用依賴)。


dependency中的type一般不用配置,,默認(rèn)是jar,。當(dāng)type為pom時,代表引用關(guān)系:

[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <dependency>  
  2.      <groupId>org.sonatype.mavenbook</groupId>  
  3.      <artifactId>persistence-deps</artifactId>  
  4.      <version>1.0</version>  
  5.      <type>pom</type>  
  6. </dependency>  

此時,,本項目會將persistence-deps的所有jar包導(dǎo)入依賴庫,。

可以創(chuàng)建一個打包方式為pom項目來將某些通用的依賴歸在一起,供其他項目直接引用,,不要忘了指定依賴類型為pom(<type>pom</type>),。


繼承關(guān)系

繼承就是避免重復(fù),maven的繼承也是這樣,,它還有一個好處就是讓項目更加安全,。項目之間存在上下級關(guān)系時就屬于繼承關(guān)系。

父項目的配置如下:

[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <project>    
  2.       <modelVersion>4.0.0</modelVersion>    
  3.       <groupId>org.clf.parent</groupId>    
  4.       <artifactId>my-parent</artifactId>    
  5.       <version>2.0</version>    
  6.       <packaging>pom</packaging>   
  7.         
  8.       <!-- 該節(jié)點下的依賴會被子項目自動全部繼承 -->  
  9.       <dependencies>  
  10.         <dependency>  
  11.                <groupId>org.slf4j</groupId>  
  12.                <artifactId>slf4j-api</artifactId>  
  13.                <version>1.7.7</version>  
  14.                <type>jar</type>  
  15.                <scope>compile</scope>  
  16.         </dependency>  
  17.       </dependencies>  
  18.         
  19.       <dependencyManagement>  
  20.         <!-- 該節(jié)點下的依賴關(guān)系只是為了統(tǒng)一版本號,,不會被子項目自動繼承,,-->  
  21.         <!--除非子項目主動引用,好處是子項目可以不用寫版本號 -->  
  22.         <dependencies>  
  23.            <dependency>  
  24.                 <groupId>org.springframework</groupId>  
  25.                 <artifactId>spring-orm</artifactId>  
  26.                 <version>4.2.5.RELEASE</version>  
  27.             </dependency>  
  28.   
  29.             <dependency>  
  30.                 <groupId>org.springframework</groupId>  
  31.                 <artifactId>spring-web</artifactId>  
  32.                 <version>4.2.5.RELEASE</version>  
  33.             </dependency>  
  34.             <dependency>  
  35.                 <groupId>org.springframework</groupId>  
  36.                 <artifactId>spring-context-support</artifactId>  
  37.                 <version>4.2.5.RELEASE</version>  
  38.             </dependency>  
  39.             <dependency>  
  40.                 <groupId>org.springframework</groupId>  
  41.                 <artifactId>spring-beans</artifactId>  
  42.                 <version>4.2.5.RELEASE</version>  
  43.             </dependency>  
  44.         </dependencies>  
  45.        </dependencyManagement>  
  46.   
  47.        <!-- 這個元素和dependencyManagement相類似,,它是用來進行插件管理的-->  
  48.        <pluginManagement>    
  49.        ......  
  50.        </pluginManagement>  
  51. </project>  

注意,,此時<packaging>必須為pom

為了項目的正確運行,,必須讓所有的子項目使用依賴項的統(tǒng)一版本,,必須確保應(yīng)用的各個項目的依賴項和版本一致,才能保證測試的和發(fā)布是相同的結(jié)果。

Maven 使用dependencyManagement 元素來提供了一種管理依賴版本號的方式,。通常會在一個組織或者項目的最頂層的父POM 中看到dependencyManagement 元素,。使用pom.xml 中的dependencyManagement 元素能讓所有在子項目中引用一個依賴而不用顯式的列出版本號。Maven 會沿著父子層次向上走,,直到找到一個擁有dependencyManagement元素的項目,,然后它就會使用在這個 dependencyManagement 元素中指定的版本號。

 父項目在dependencies聲明的依賴,,子項目會從全部自動地繼承,。而父項目在 dependencyManagement里只是聲明依賴,并不實現(xiàn)引入,,因此子項目需要顯示的聲明需要用的依賴,。如果不在子項目中聲明依賴,是不會從父 項目中繼承下來的,;只有在子項目中寫了該依賴項,,并且沒有指定具體版本,才會從父項目中繼承該項,,并且version和scope都讀取自父pom另外如 果子項目中指定了版本號,,那么會使用子項目中指定的jar版本。

如果某個項目需要繼承該父項目,,基礎(chǔ)配置應(yīng)該這樣:

[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <project>    
  2.       <modelVersion>4.0.0</modelVersion>    
  3.       <groupId>org.clf.parent.son</groupId>    
  4.       <artifactId>my-son</artifactId>    
  5.       <version>1.0</version>   
  6.       <!-- 聲明將父項目的坐標(biāo) -->  
  7.       <parent>  
  8.           <groupId>org.clf.parent</groupId>    
  9.           <artifactId>my-parent</artifactId>    
  10.           <version>2.0</version>    
  11.           <!-- 父項目的pom.xml文件的相對路徑,。相對路徑允許你選擇一個不同的路徑。 -->  
  12.           <!--   默認(rèn)值是../pom.xml,。Maven首先在構(gòu)建當(dāng)前項目的地方尋找父項目的pom,, -->  
  13.           <!--   其次在文件系統(tǒng)的這個位置(relativePath位置), -->  
  14.           <!--   然后在本地倉庫,,最后在遠程倉庫尋找父項目的pom,。 -->  
  15.           <relativePath>../parent-project/pom.xml</relativePath>  
  16.       </parent>   
  17.         
  18.       <!-- 聲明父項目dependencyManagement的依賴,不用寫版本號 -->  
  19.       <dependencies>  
  20.           <dependency>  
  21.               <groupId>org.springframework</groupId>  
  22.               <artifactId>spring-web</artifactId>  
  23.           </dependency>  
  24.           <dependency>  
  25.               <groupId>org.springframework</groupId>  
  26.               <artifactId>spring-beans</artifactId>  
  27.           </dependency>  
  28.       </dependencies>  
  29.          
  30. </project>  

聚合關(guān)系

隨著技術(shù)的飛速發(fā)展和各類用戶對軟件的要求越來越高,,軟件本身也變得越來越復(fù)雜,,然后軟件設(shè)計人員開始采用各種方式進行開發(fā),于是就有了我們的分層架構(gòu),、分模塊開發(fā),,來提高代碼的清晰和重用。針對于這一特性,,maven也給予了相應(yīng)的配置,。

maven的多模塊管理也是非常強大的。一般來說,,maven要求同一個工程的所有模塊都放置到同一個目錄下,,每一個子目錄代表一個模塊,,比如

總項目/

     pom.xml 總項目的pom配置文件

     子模塊1/

           pom.xml 子模塊1的pom文件

     子模塊2/

          pom.xml子模塊2的pom文件

總項目的配置如下:

[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <project>   
  2.        <modelVersion>4.0.0</modelVersion>   
  3.        <groupId>org.clf.parent</groupId>   
  4.        <artifactId>my-parent</artifactId>   
  5.        <version>2.0</version>   
  6.          
  7.        <!-- 打包類型必須為pom -->  
  8.        <packaging>pom</packaging>  
  9.          
  10.        <!-- 聲明了該項目的直接子模塊 -->  
  11.        <modules>  
  12.        <!-- 這里配置的不是artifactId,而是這個模塊的目錄名稱-->  
  13.         <module>module-1</module>  
  14.         <module>module-2</module>  
  15.         <module>module-3</module>  
  16.     </modules>  
  17.          
  18.        <!-- 聚合也屬于父子關(guān)系,,總項目中的dependencies與dependencyManagement,、pluginManagement用法與繼承關(guān)系類似 -->  
  19.        <dependencies>  
  20.         ......  
  21.        </dependencies>  
  22.           
  23.        <dependencyManagement>  
  24.         ......  
  25.        </dependencyManagement>  
  26.    
  27.        <pluginManagement>   
  28.        ......  
  29.        </pluginManagement>  
  30. </project>   
 

子模塊的配置如下: 

[html] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. <project>   
  2.        <modelVersion>4.0.0</modelVersion>   
  3.        <groupId>org.clf.parent.son</groupId>   
  4.        <artifactId>my-son</artifactId>   
  5.        <version>1.0</version>  
  6.        <!-- 聲明將父項目的坐標(biāo) -->  
  7.        <parent>  
  8.               <groupId>org.clf.parent</groupId>   
  9.               <artifactId>my-parent</artifactId>   
  10.               <version>2.0</version>   
  11.        </parent>  
  12. </project>  


繼承與聚合的關(guān)系

首先,繼承與聚合都屬于父子關(guān)系,,并且,,聚合 POM與繼承關(guān)系中的父POM的packaging都是pom。

不同的是,,對于聚合模塊來說,,它知道有哪些被聚合的模塊,但那些被聚合的模塊不知道這個聚合模塊的存在,。對于繼承關(guān)系的父 POM來說,它不知道有哪些子模塊繼承與它,,但那些子模塊都必須知道自己的父 POM是什么,。

在實際項目中,一個 POM往往既是聚合POM,,又是父 POM,,它繼承了某個項目,本身包含幾個子模塊,,同時肯定會存在普通的依賴關(guān)系,,就是說,依賴,、繼承,、聚合這三種關(guān)系是并存的。

Maven可繼承的POM 元素列表如下:

groupId :項目組 ID ,,項目坐標(biāo)的核心元素,;

version :項目版本,項目坐標(biāo)的核心元素,;

description :項目的描述信息,;

organization :項目的組織信息;

inceptionYear :項目的創(chuàng)始年份,;

url :項目的 url 地址

develoers :項目的開發(fā)者信息,;

contributors :項目的貢獻者信息;

distributionManagerment:項目的部署信息,;

issueManagement :缺陷跟蹤系統(tǒng)信息,;

ciManagement :項目的持續(xù)繼承信息;

scm :項目的版本控制信息,;

mailingListserv :項目的郵件列表信息,;

properties :自定義的 Maven 屬性;

dependencies :項目的依賴配置;

dependencyManagement:醒目的依賴管理配置,;

repositories :項目的倉庫配置,;

build :包括項目的源碼目錄配置、輸出目錄配置,、插件配置,、插件管理配置等;

reporting :包括項目的報告輸出目錄配置,、報告插件配置等,。


http://blog.csdn.NET/u012152619/article/details/51510801


    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多