乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      maven repository

       埃德溫會(huì)館 2015-12-15

      什么是Maven倉(cāng)庫(kù)

      在不用Maven的時(shí)候,比如說(shuō)以前我們用Ant構(gòu)建項(xiàng)目,在項(xiàng)目目錄下,往往會(huì)看到一個(gè)名為/lib的子目錄,那里存放著各類第三方依賴jar文件,如log4j.jar,junit.jar等等。每建立一個(gè)項(xiàng)目,你都需要建立這樣的一個(gè)/lib目錄,然后復(fù)制一對(duì)jar文件,這是很明顯的重復(fù)。重復(fù)永遠(yuǎn)是噩夢(mèng)的起點(diǎn),多個(gè)項(xiàng)目不共用相同的jar文件,不僅會(huì)造成磁盤資源的浪費(fèi),也使得版本的一致性管理變得困難。此外,如果你使用版本管理工具,如SVN(你沒有使用版本管理工具?馬上試試SVN吧,它能幫你解決很多頭疼的問(wèn)題),你需要將大量的jar文件提交到代碼庫(kù)里,可是版本管理工具在處理二進(jìn)制文件方面并不出色。

      Maven倉(cāng)庫(kù)就是放置所有JAR文件(WAR,ZIP,POM等等)的地方,所有Maven項(xiàng)目可以從同一個(gè)Maven倉(cāng)庫(kù)中獲取自己所需要的依賴JAR,這節(jié)省了磁盤資源。此外,由于Maven倉(cāng)庫(kù)中所有的JAR都有其自己的坐標(biāo),該坐標(biāo)告訴Maven它的組ID,構(gòu)件ID,版本,打包方式等等,因此Maven項(xiàng)目可以方便的進(jìn)行依賴版本管理。你也不在需要提交JAR文件到SCM倉(cāng)庫(kù)中,你可以建立一個(gè)組織層次的Maven倉(cāng)庫(kù),供所有成員使用。

      簡(jiǎn)言之,Maven倉(cāng)庫(kù)能幫助我們管理構(gòu)件(主要是JAR)。

       

      本地倉(cāng)庫(kù) vs. 遠(yuǎn)程倉(cāng)庫(kù)

      運(yùn)行Maven的時(shí)候,Maven所需要的任何構(gòu)件都是直接從本地倉(cāng)庫(kù)獲取的。如果本地倉(cāng)庫(kù)沒有,它會(huì)首先嘗試從遠(yuǎn)程倉(cāng)庫(kù)下載構(gòu)件至本地倉(cāng)庫(kù),然后再使用本地倉(cāng)庫(kù)的構(gòu)件。

      比如說(shuō),你的項(xiàng)目配置了junit-3.8的依賴,在你運(yùn)行mvn test 的時(shí)候,Maven需要使用junit-3.8的jar文件,它首先根據(jù)坐標(biāo)查找本地倉(cāng)庫(kù),如果找到,就直接使用。如果沒有,Maven會(huì)檢查可用的遠(yuǎn)程倉(cāng)庫(kù)配置,然后逐個(gè)嘗試這些遠(yuǎn)程倉(cāng)庫(kù)去下載junit-3.8的jar文件,如果遠(yuǎn)程倉(cāng)庫(kù)存在該文件,Maven會(huì)將其下載到本地倉(cāng)庫(kù)中,繼而使用。如果嘗試過(guò)所有遠(yuǎn)程倉(cāng)庫(kù)之后,Maven還是沒能夠下載到該文件,它就會(huì)報(bào)錯(cuò)。

      Maven缺省的本地倉(cāng)庫(kù)地址為${user.home}/.m2/repository 。也就是說(shuō),一個(gè)用戶會(huì)對(duì)應(yīng)的擁有一個(gè)本地倉(cāng)庫(kù)。

      你也可以自定義本地倉(cāng)庫(kù)的位置,修改${user.home}/.m2/settings.xml

      Xml代碼 復(fù)制代碼
      1. <settings>  
      2.   ...   
      3.   <localRepository>D:/java/repository</localRepository>  
      4.   ...   
      5. </settings>  
      1. <settings>  
      2.   ...  
      3.   <localRepository>D:/java/repository</localRepository>  
      4.   ...  
      5. </settings>  

      你還可以在運(yùn)行時(shí)指定本地倉(cāng)庫(kù)位置:

      mvn clean install -Dmaven.repo.local=/home/juven/myrepo/

      還有一點(diǎn)需要理解的是,當(dāng)我們運(yùn)行install的時(shí)候,Maven實(shí)際上是將項(xiàng)目生成的構(gòu)件安裝到了本地倉(cāng)庫(kù),也就是說(shuō),只有install了之后,其它項(xiàng)目才能使用此項(xiàng)目生成的構(gòu)件。

      了解了本地倉(cāng)庫(kù),接著了解一下Maven缺省的遠(yuǎn)程倉(cāng)庫(kù),即Maven中央倉(cāng)庫(kù)。

      安裝好Maven之后,我們可以建立一個(gè)簡(jiǎn)單的項(xiàng)目,配置一些簡(jiǎn)單的依賴,然后運(yùn)行mvn clean install,項(xiàng)目就構(gòu)建好了。我們沒有手工的去下載任何jar文件,這一切都是因?yàn)镸aven中央倉(cāng)庫(kù)的存在,當(dāng)Maven在本地倉(cāng)庫(kù)找不到需要的jar文件時(shí),它會(huì)查找遠(yuǎn)程倉(cāng)庫(kù),而一個(gè)原始的Maven安裝就自帶了一個(gè)遠(yuǎn)程倉(cāng)庫(kù)——Maven中央倉(cāng)庫(kù)。

      這個(gè)Maven中央倉(cāng)庫(kù)是在哪里定義的呢?在我的機(jī)器上,我安裝了maven-2.0.10,我可以找到這個(gè)文件:${M2_HOME}/lib/maven-2.0.10-uber.jar ,打開該文件,能找到超級(jí)POM:/org/apache/maven/project/pom-4.0.0.xml ,它是所有Maven POM的父POM,所有Maven項(xiàng)目繼承該配置,你可以在這個(gè)POM中發(fā)現(xiàn)如下配置:

      Xml代碼 復(fù)制代碼
      1. <repositories>  
      2.   <repository>  
      3.     <id>central</id>  
      4.     <name>Maven Repository Switchboard</name>  
      5.     <layout>default</layout>  
      6.     <url>http://repo1./maven2</url>  
      7.     <snapshots>  
      8.       <enabled>false</enabled>  
      9.     </snapshots>  
      10.   </repository>  
      11. </repositories>  
      1. <repositories>  
      2.   <repository>  
      3.     <id>central</id>  
      4.     <name>Maven Repository Switchboard</name>  
      5.     <layout>default</layout>  
      6.     <url>http://repo1./maven2</url>  
      7.     <snapshots>  
      8.       <enabled>false</enabled>  
      9.     </snapshots>  
      10.   </repository>  
      11. </repositories>  

      關(guān)于遠(yuǎn)程倉(cāng)庫(kù)的配置,下面的小節(jié)我會(huì)詳細(xì)解釋,這里我們只要知道,中央倉(cāng)庫(kù)的id為central,遠(yuǎn)程url地址為http://repo1./maven2,它關(guān)閉了snapshot版本構(gòu)件下載的支持。

       

      在POM中配置遠(yuǎn)程倉(cāng)庫(kù)

      前面我們看到超級(jí)POM配置了ID為central的遠(yuǎn)程倉(cāng)庫(kù),我們可以在POM中配置其它的遠(yuǎn)程倉(cāng)庫(kù)。這樣做的原因有很多,比如你有一個(gè)局域網(wǎng)的遠(yuǎn)程倉(cāng)庫(kù),使用該倉(cāng)庫(kù)能大大提高下載速度,繼而提高構(gòu)建速度,也有可能你依賴的一個(gè)jar在central中找不到,它只存在于某個(gè)特定的公共倉(cāng)庫(kù),這樣你也不得不添加那個(gè)遠(yuǎn)程倉(cāng)庫(kù)的配置。

      這里我配置一個(gè)遠(yuǎn)程倉(cāng)庫(kù)指向中央倉(cāng)庫(kù)的中國(guó)鏡像:

      Xml代碼 復(fù)制代碼
      1. <project>  
      2. ...   
      3.   <repositories>  
      4.     <repository>  
      5.       <id>maven-net-cn</id>  
      6.       <name>Maven China Mirror</name>  
      7.       <url>http:///content/groups/public/</url>  
      8.       <releases>  
      9.         <enabled>true</enabled>  
      10.       </releases>  
      11.       <snapshots>  
      12.         <enabled>false</enabled>  
      13.       </snapshots>  
      14.     </repository>  
      15.   </repositories>  
      16.   <pluginRepositories>  
      17.     <pluginRepository>  
      18.       <id>maven-net-cn</id>  
      19.       <name>Maven China Mirror</name>  
      20.       <url>http:///content/groups/public/</url>  
      21.       <releases>  
      22.         <enabled>true</enabled>  
      23.       </releases>  
      24.       <snapshots>  
      25.         <enabled>false</enabled>  
      26.       </snapshots>       
      27.     </pluginRepository>  
      28.   </pluginRepositories>  
      29. ...   
      30. </project>  
      1. <project>  
      2. ...  
      3.   <repositories>  
      4.     <repository>  
      5.       <id>maven-net-cn</id>  
      6.       <name>Maven China Mirror</name>  
      7.       <url>http:///content/groups/public/</url>  
      8.       <releases>  
      9.         <enabled>true</enabled>  
      10.       </releases>  
      11.       <snapshots>  
      12.         <enabled>false</enabled>  
      13.       </snapshots>  
      14.     </repository>  
      15.   </repositories>  
      16.   <pluginRepositories>  
      17.     <pluginRepository>  
      18.       <id>maven-net-cn</id>  
      19.       <name>Maven China Mirror</name>  
      20.       <url>http:///content/groups/public/</url>  
      21.       <releases>  
      22.         <enabled>true</enabled>  
      23.       </releases>  
      24.       <snapshots>  
      25.         <enabled>false</enabled>  
      26.       </snapshots>      
      27.     </pluginRepository>  
      28.   </pluginRepositories>  
      29. ...  
      30. </project>  

      我們先看一下<repositories>的配置,你可以在它下面添加多個(gè)<repository> ,每個(gè)<repository>都有它唯一的ID,一個(gè)描述性的name,以及最重要的,遠(yuǎn)程倉(cāng)庫(kù)的url。此外,<releases><enabled>true</enabled></releases>告訴Maven可以從這個(gè)倉(cāng)庫(kù)下載releases版本的構(gòu)件,而<snapshots><enabled>false</enabled></snapshots>告訴Maven不要從這個(gè)倉(cāng)庫(kù)下載snapshot版本的構(gòu)件。禁止從公共倉(cāng)庫(kù)下載snapshot構(gòu)件是推薦的做法,因?yàn)檫@些構(gòu)件不穩(wěn)定,且不受你控制,你應(yīng)該避免使用。當(dāng)然,如果你想使用局域網(wǎng)內(nèi)組織內(nèi)部的倉(cāng)庫(kù),你可以激活snapshot的支持。

      關(guān)于<repositories>的更詳細(xì)的配置及相關(guān)解釋,請(qǐng)參考:http://www./books/maven-book/reference_zh/apas02s08.html。

      至于<pluginRepositories>,這是配置Maven從什么地方下載插件構(gòu)件(Maven的所有實(shí)際行為都由其插件完成)。該元素的內(nèi)部配置和<repository>完全一樣,不再解釋。

       

      在settings.xml中配置遠(yuǎn)程倉(cāng)庫(kù)

      我們知道了如何在POM中配置遠(yuǎn)程倉(cāng)庫(kù),但考慮這樣的情況:在一個(gè)公司內(nèi)部,同時(shí)進(jìn)行這3個(gè)項(xiàng)目,而且以后隨著這幾個(gè)項(xiàng)目的結(jié)束,越來(lái)越多的項(xiàng)目會(huì)開始;同時(shí),公司內(nèi)部建立一個(gè)Maven倉(cāng)庫(kù)。我們統(tǒng)一為所有這些項(xiàng)目配置該倉(cāng)庫(kù),于是不得不為每個(gè)項(xiàng)目提供同樣的配置。問(wèn)題出現(xiàn)了,這是重復(fù)

      其實(shí)我們可以做到只配置一次,在哪里配置呢?就是settings.xml。

      不過(guò)事情沒有那么簡(jiǎn)單,不是簡(jiǎn)單的將POM中的<repositories>及<pluginRepositories>元素復(fù)制到settings.xml中就可以,setting.xml不直接支持 這兩個(gè)元素。但我們還是有一個(gè)并不復(fù)雜的解決方案,就是利用profile,如下:

      Xml代碼 復(fù)制代碼
      1. <settings>  
      2.   ...   
      3.   <profiles>  
      4.     <profile>  
      5.       <id>dev</id>  
      6.       <!-- repositories and pluginRepositories here-->  
      7.     </profile>  
      8.   </profiles>  
      9.   <activeProfiles>  
      10.     <activeProfile>dev</activeProfile>  
      11.   </activeProfiles>  
      12.   ...   
      13. </settings>  
      1. <settings>  
      2.   ...  
      3.   <profiles>  
      4.     <profile>  
      5.       <id>dev</id>  
      6.       <!-- repositories and pluginRepositories here-->  
      7.     </profile>  
      8.   </profiles>  
      9.   <activeProfiles>  
      10.     <activeProfile>dev</activeProfile>  
      11.   </activeProfiles>  
      12.   ...  
      13. </settings>  

      這里我們定義一個(gè)id為dev的profile,將所有repositories以及pluginRepositories元素放到這個(gè)profile中,然后,使用<activeProfiles>元素自動(dòng)激活該profile。這樣,你就不用再為每個(gè)POM重復(fù)配置倉(cāng)庫(kù)。

      使用profile為settings.xml添加倉(cāng)庫(kù)提供了一種用戶全局范圍的倉(cāng)庫(kù)配置。

       

      鏡像

      如果你的地理位置附近有一個(gè)速度更快的central鏡像,或者你想覆蓋central倉(cāng)庫(kù)配置,或者你想為所有POM使用唯一的一個(gè)遠(yuǎn)程倉(cāng)庫(kù)(這個(gè)遠(yuǎn)程倉(cāng)庫(kù)代理的所有必要的其它倉(cāng)庫(kù)),你可以使用settings.xml中的mirror配置。

      以下的mirror配置用覆蓋了Maven自帶的central:

      Xml代碼 復(fù)制代碼
      1. <settings>  
      2. ...   
      3.   <mirrors>  
      4.     <mirror>  
      5.       <id>maven-net-cn</id>  
      6.       <name>Maven China Mirror</name>  
      7.       <url>http:///content/groups/public/</url>  
      8.       <mirrorOf>central</mirrorOf>  
      9.     </mirror>  
      10.   </mirrors>  
      11. ...   
      12. </settings>  
      1. <settings>  
      2. ...  
      3.   <mirrors>  
      4.     <mirror>  
      5.       <id>maven-net-cn</id>  
      6.       <name>Maven China Mirror</name>  
      7.       <url>http:///content/groups/public/</url>  
      8.       <mirrorOf>central</mirrorOf>  
      9.     </mirror>  
      10.   </mirrors>  
      11. ...  
      12. </settings>  

       

      這里唯一需要解釋的是<mirrorOf>,這里我們配置central的鏡像,我們也可以配置一個(gè)所有倉(cāng)庫(kù)的鏡像,以保證該鏡像是Maven唯一使用的倉(cāng)庫(kù):

      Xml代碼 復(fù)制代碼
      1. <settings>  
      2. ...   
      3.   <mirrors>  
      4.     <mirror>  
      5.       <id>my-org-repo</id>  
      6.       <name>Repository in My Orgnization</name>  
      7.       <url>http://192.168.1.100/maven2</url>  
      8.       <mirrorOf>*</mirrorOf>  
      9.     </mirror>  
      10.   </mirrors>  
      11. ...   
      12. </settings>  
      1. <settings>  
      2. ...  
      3.   <mirrors>  
      4.     <mirror>  
      5.       <id>my-org-repo</id>  
      6.       <name>Repository in My Orgnization</name>  
      7.       <url>http://192.168.1.100/maven2</url>  
      8.       <mirrorOf>*</mirrorOf>  
      9.     </mirror>  
      10.   </mirrors>  
      11. ...  
      12. </settings>  

      關(guān)于更加高級(jí)的鏡像配置,可以參考:http://maven./guides/mini/guide-mirror-settings.html。

       

      分發(fā)構(gòu)件至遠(yuǎn)程倉(cāng)庫(kù)

      mvn install 會(huì)將項(xiàng)目生成的構(gòu)件安裝到本地Maven倉(cāng)庫(kù),mvn deploy 用來(lái)將項(xiàng)目生成的構(gòu)件分發(fā)到遠(yuǎn)程Maven倉(cāng)庫(kù)。本地Maven倉(cāng)庫(kù)的構(gòu)件只能供當(dāng)前用戶使用,在分發(fā)到遠(yuǎn)程Maven倉(cāng)庫(kù)之后,所有能訪問(wèn)該倉(cāng)庫(kù)的用戶都能使用你的構(gòu)件。

      我們需要配置POM的distributionManagement來(lái)指定Maven分發(fā)構(gòu)件的位置,如下:

      Xml代碼 復(fù)制代碼
      1. <project>     
      2.   ...     
      3.   <distributionManagement>     
      4.     <repository>     
      5.       <id>nexus-releases</id>     
      6.       <name>Nexus Release Repository</name>     
      7.       <url>http://127.0.0.1:8080/nexus/content/repositories/releases/</url>     
      8.     </repository>     
      9.     <snapshotRepository>     
      10.       <id>nexus-snapshots</id>     
      11.       <name>Nexus Snapshot Repository</name>     
      12.       <url>http://127.0.0.1:8080/nexus/content/repositories/snapshots/</url>     
      13.     </snapshotRepository>     
      14.   </distributionManagement>     
      15.   ...     
      16. </project>    
      1. <project>    
      2.   ...    
      3.   <distributionManagement>    
      4.     <repository>    
      5.       <id>nexus-releases</id>    
      6.       <name>Nexus Release Repository</name>    
      7.       <url>http://127.0.0.1:8080/nexus/content/repositories/releases/</url>    
      8.     </repository>    
      9.     <snapshotRepository>    
      10.       <id>nexus-snapshots</id>    
      11.       <name>Nexus Snapshot Repository</name>    
      12.       <url>http://127.0.0.1:8080/nexus/content/repositories/snapshots/</url>    
      13.     </snapshotRepository>    
      14.   </distributionManagement>    
      15.   ...    
      16. </project>    

      Maven區(qū)別對(duì)待release版本的構(gòu)件和snapshot版本的構(gòu)件,snapshot為開發(fā)過(guò)程中的版本,實(shí)時(shí),但不穩(wěn)定,release版本則比較穩(wěn)定。Maven會(huì)根據(jù)你項(xiàng)目的版本來(lái)判斷將構(gòu)件分發(fā)到哪個(gè)倉(cāng)庫(kù)。

      一般來(lái)說(shuō),分發(fā)構(gòu)件到遠(yuǎn)程倉(cāng)庫(kù)需要認(rèn)證,如果你沒有配置任何認(rèn)證信息,你往往會(huì)得到401錯(cuò)誤。這個(gè)時(shí)候,如下在settings.xml中配置認(rèn)證信息:

      Xml代碼 復(fù)制代碼
      1. <settings>     
      2.   ...     
      3.   <servers>     
      4.     <server>     
      5.       <id>nexus-releases</id>     
      6.       <username>admin</username>     
      7.       <password>admin123</password>     
      8.     </server>     
      9.     <server>     
      10.       <id>nexus-snapshots</id>     
      11.       <username>admin</username>     
      12.       <password>admin123</password>     
      13.     </server>       
      14.   </servers>     
      15.   ...     
      16. </settings>  
      1. <settings>    
      2.   ...    
      3.   <servers>    
      4.     <server>    
      5.       <id>nexus-releases</id>    
      6.       <username>admin</username>    
      7.       <password>admin123</password>    
      8.     </server>    
      9.     <server>    
      10.       <id>nexus-snapshots</id>    
      11.       <username>admin</username>    
      12.       <password>admin123</password>    
      13.     </server>      
      14.   </servers>    
      15.   ...    
      16. </settings>  

      需要注意的是,settings.xml中server元素下id的值必須與POM中repository或snapshotRepository下id的值完全一致。將認(rèn)證信息放到settings下而非POM中,是因?yàn)镻OM往往是它人可見的,而settings.xml是本地的。

       

      小結(jié)

      本文介紹了Maven倉(cāng)庫(kù),它是什么?本地倉(cāng)庫(kù),遠(yuǎn)程倉(cāng)庫(kù),中央倉(cāng)庫(kù)具體是指什么?并介紹了如何在POM中配置項(xiàng)目層次的倉(cāng)庫(kù),在settings中配置用戶層次的倉(cāng)庫(kù),以及mirror。本文還介紹了如何安裝構(gòu)件到本地倉(cāng)庫(kù),如何分發(fā)構(gòu)件至倉(cāng)庫(kù)。

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

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多