最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Maven倉庫之本地倉庫、遠程倉庫

 更新時間:2017年12月08日 16:43:11   作者:桐桐-Dragon  
這篇文章主要介紹了Maven倉庫之本地倉庫、遠程倉庫,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

什么是Maven倉庫

在不用Maven的時候,比如說以前我們用Ant構(gòu)建項目,在項目目錄下,往往會看到一個名為/lib的子目錄,那里存放著各類第三方依賴jar文件,如log4j.jar,junit.jar等等。

每建立一個項目,你都需要建立這樣的一個/lib目錄,然后復(fù)制一對jar文件,這是很明顯的重復(fù)。重復(fù)永遠是噩夢的起點,多個項目不共用相同的jar文件,不僅會造成磁盤資源的浪費,也使得版本的一致性管理變得困難。

此外,如果你使用版本管理工具,如SVN(你沒有使用版本管理工具?馬上試試SVN吧,它能幫你解決很多頭疼的問題),你需要將大量的jar文件提交到代碼庫里,可是版本管理工具在處理二進制文件方面并不出色。

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

簡言之,Maven倉庫能幫助我們管理構(gòu)件(主要是JAR)。

在Maven中,任何一個依賴、插件或者項目構(gòu)建的輸出,都可以稱之為構(gòu)件。

Maven在某個統(tǒng)一的位置存儲所有項目的共享的構(gòu)件,這個統(tǒng)一的位置,我們就稱之為倉庫。(倉庫就是存放依賴和插件的地方)

任何的構(gòu)件都有唯一的坐標,Maven根據(jù)這個坐標定義了構(gòu)件在倉庫中的唯一存儲路徑,

解讀Maven在倉庫中的存儲路徑:

1.基于groupId準備路徑,將句點分隔符轉(zhuǎn)成路徑分隔符,就是將  "."  轉(zhuǎn)換成 "/" ; example: org.testng --->org/testng

2.基于artifactId準備路徑,將artifactId連接到后面:org/testng/testng

3.使用version準備路徑,將version連接到后面:org/testng/testng/5.8

4.將artifactId于version以分隔符連字號連接到后面:org/testng/testng/5.8/tesng-5.8

5.判斷如果構(gòu)件有classifier,就要在 第4項 后增加 分隔符連字號 再加上 classifier,org/testng/testng/5.8/tesng-5.8-jdk5

6.檢查構(gòu)件的extension,如果extension存在,則加上句點分隔符和extension,而extension是由packing決定的,org/testng/testng/5.8/tesng-5.8-jdk5.jar

到這里我們就明白了Maven 對于構(gòu)件存儲的細節(jié)。

Maven 倉庫的分類:

maven的倉庫只有兩大類:1.本地倉庫 2.遠程倉庫,在遠程倉庫中又分成了3種:2.1 中央倉庫 2.2 私服 2.3 其它公共庫

1.本地倉庫,顧名思義,就是Maven在本地存儲構(gòu)件的地方。

注:maven的本地倉庫,在安裝maven后并不會創(chuàng)建,它是在第一次執(zhí)行maven命令的時候才被創(chuàng)建

maven本地倉庫的默認位置:無論是Windows還是Linux,在用戶的目錄下都有一個.m2/repository/的倉庫目錄,這就是Maven倉庫的默認位置

如何更改maven默認的本地倉庫的位置:這里要引入一個新的元素:localRepository,它是存在于maven的settings.xml文件中

1.1 更改配置用戶范圍的本地倉庫:先在/.m2/目錄下創(chuàng)建settings.xml文件,然后在~/.m2/settings.xml,設(shè)置localRepository元素的值為想要的倉庫地址

<settings> <localRepository>D:\maven_new_repository</localRepository> 
</settings> 

這時候,maven的本地倉庫地址就變成了 D:\maven_new_repository ,注:此時配置的maven的本地倉庫是屬于用戶范圍的。

1.2 更改配置全局范圍的本地倉庫:在M2_HOME/conf/settings.xml中更改配置,更改配置的方法同上

注:此時更改后,所有的用戶都會受到影響,而且如果maven進行升級,那么所有的配置都會被清除,所以要提前復(fù)制和備份M2_HOME/conf/settings.xml文件

故:一般情況下不推薦配置全局的settings.xml

2. 遠程倉庫

2.1 說到遠程倉庫先從 最核心的中央倉庫開始,中央倉庫是默認的遠程倉庫,maven在安裝的時候,自帶的就是中央倉庫的配置

在maven的聚合與繼承中我們說過,所有的maven項目都會繼承超級pom,具體的說,包含了下面配置的pom我們就稱之為超級pom

<repositories> 
 <repository> 
  <id>central</id> 
  <name>Central Repository</name> 
  <url>http://repo.maven.apache.org/maven2</url> 
  <layout>default</layout> 
  <snapshots> 
  <enabled>false</enabled> 
  </snapshots> 
 </repository> 
 </repositories> 

中央倉庫包含了絕大多數(shù)流行的開源Java構(gòu)件,以及源碼、作者信息、SCM、信息、許可證信息等。一般來說,簡單的Java項目依賴的構(gòu)件都可以在這里下載到

2.2 私服

私服是一種特殊的遠程倉庫,它是架設(shè)在局域網(wǎng)內(nèi)的倉庫服務(wù),私服代理廣域網(wǎng)上的遠程倉庫,供局域網(wǎng)內(nèi)的Maven用戶使用。當Maven需要下載構(gòu)件的時候,它從私服請求,如果私服上不存在該構(gòu)件,則從外部的遠程倉庫下載,緩存在私服上之后,再為Maven的下載請求提供服務(wù)。我們還可以把一些無法從外部倉庫下載到的構(gòu)件上傳到私服上。

Maven私服的 個特性:

1.節(jié)省自己的外網(wǎng)帶寬:減少重復(fù)請求造成的外網(wǎng)帶寬消耗

2.加速Maven構(gòu)件:如果項目配置了很多外部遠程倉庫的時候,構(gòu)建速度就會大大降低

3.部署第三方構(gòu)件:有些構(gòu)件無法從外部倉庫獲得的時候,我們可以把這些構(gòu)件部署到內(nèi)部倉庫(私服)中,供內(nèi)部maven項目使用

4.提高穩(wěn)定性,增強控制:Internet不穩(wěn)定的時候,maven構(gòu)建也會變的不穩(wěn)定,一些私服軟件還提供了其他的功能

5.降低中央倉庫的負荷:maven中央倉庫被請求的數(shù)量是巨大的,配置私服也可以大大降低中央倉庫的壓力

當前主流的maven私服:

1.Apache的Archiva

2.JFrog的Artifactory

3.Sonatype的Nexus

三、遠程倉庫配置

配置遠程倉庫將引入新的配置元素:<repositories>     <repository>

在<repositories>元素下,可以使用  <repository>子元素聲明一個或者多個遠程倉庫。

例子: 

<repositories> 
  <repository> 
   <id>jboss</id> 
   <name>JBoss Repository</name> 
   <url>http://repository.jboss.com/maven2/</url> 
   <releases> 
    <updatePolicy>daily</updatePolicy><!-- never,always,interval n --> 
    <enabled>true</enabled> 
    <checksumPolicy>warn</checksumPolicy><!-- fail,ignore --> 
   </releases> 
   <snapshots> 
    <enabled>false</enabled> 
   </snapshots> 
   <layout>default</layout> 
  </repository> 
 </repositories> 

<updatePolicy>元素:表示更新的頻率,值有:never, always,interval,daily, daily 為默認值

<checksumPolicy>元素:表示maven檢查和檢驗文件的策略,warn為默認值
出于安全方面的考慮,有時我們要對遠程倉庫的訪問進行認證,一般將認證信息配置在settings.xml中:

<servers> 
  <server> 
   <id>same with repository id in pom</id> 
   <username>username</username> 
   <password>pwd</password> 
  </server> 
 </servers> 

注:這里的id必須與POM中需要認證的repository元素的Id一致。

如何將生成的項目部署到遠程倉庫

完成這項工作,也需要在POM中進行配置,這里有新引入了一個元素:<distributionManagement>

distributionManagement包含了2個子元素:repository和snapshotRepository, 前者表示發(fā)布版本構(gòu)件的倉庫,后者表示快照版本的倉庫

這兩個元素都需要配置 id(該遠程倉庫的唯一標識),name,url(表示該倉庫的地址)

向遠程倉庫中部署構(gòu)件,需要進行認證。配置同上

配置正確后運行: mvn clean deploy

正確的看待快照

之前我們在配置pom的時候,對于快照的配置都很謹慎,或者說很少用快照的版本,原因是它還很不穩(wěn)定,極容易給我們的系統(tǒng)帶來未知的錯誤,讓我們很難查找。其實快照版本也并不是一無是處,快照最大的用途是用在開發(fā)的過程中,尤其是有模塊依賴的時候,比如說AB兩個模塊同時開發(fā),A依賴于B,開發(fā)過程中AB都是持續(xù)集成的開發(fā),不斷的修改POM文件和構(gòu)建工程,這時候版本同步就成了一個很大的問題。使用快照就可以達到這一目的。

其實在快照版本在發(fā)布的過程中,Maven會自動為構(gòu)件以當前時間戳做標記,有了這個時間戳,我們就可以隨時找到最新的快照版本,這樣也就解決剛才說的 協(xié)作開發(fā)的問題。

至于A如何檢查B的更新,剛剛在講配置的時候說過,快照配置中有一個元素可以控制檢查更新的頻率------updatePolicy
我們也可以使用命令行加參數(shù)的形式強制執(zhí)行讓maven檢查更新:mvn clean install-U

maven到底是如何從倉庫中解析構(gòu)件的呢?----maven從倉庫解析依賴的機制

1. 當依賴的范圍是system的時候,Maven直接從本地文件系統(tǒng)解析構(gòu)件

2. 根據(jù)依賴坐標計算倉庫路徑后,嘗試直接從本地倉庫尋找構(gòu)件,如果發(fā)現(xiàn)相應(yīng)構(gòu)件,則解析成功

3. 在本地倉庫不存在相應(yīng)的構(gòu)件情況下,如果依賴的版本是顯示的發(fā)布版本構(gòu)件,則遍歷所有的遠程倉庫,發(fā)現(xiàn)后下載使用

4. 如果依賴的版本是RELEASE或LATEST, 則基于更新策略讀取所有遠程倉庫的元數(shù)據(jù),將其于本地倉庫的對應(yīng)元數(shù)據(jù)合并后,計算出RELEASE或者LATEST的真實值,然后基于這個真實值檢查本地倉庫

5. 如果依賴的版本是SNAPSHOT, 則基于更新策略讀取所有遠程倉庫的元數(shù)據(jù), 將其與本地倉庫的對應(yīng)元數(shù)據(jù)合并后,得到最新快照版本的值,然后基于該值檢查本地倉庫或從遠程倉庫下載

6. 如果最后解析到的構(gòu)件版本是時間戳格式的快照,則復(fù)制其時間戳格式的文件 至 非時間戳格式,并使用該非時間戳格式的構(gòu)件

注:一定要記得<release>  <enabled>     &    <snapshot>  <enabled> ,對于快照也是一樣

在POM的依賴聲明的時候不推薦使用LATEST & RELEASE, 在Maven3中也不再支持在插件配置中使用LATEST & RELEASE, 如果不設(shè)置插件版本,那么最終版本和release一樣,

maven只會解析最新的發(fā)布版本構(gòu)建。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring中利用SchedulingConfigurer實現(xiàn)動態(tài)定時任務(wù)配置的示例

    Spring中利用SchedulingConfigurer實現(xiàn)動態(tài)定時任務(wù)配置的示例

    定時任務(wù)是一項至關(guān)重要的功能,它們使得我們能夠按照預(yù)定的時間執(zhí)行特定的任務(wù),本文主要介紹了Spring中利用SchedulingConfigurer實現(xiàn)動態(tài)定時任務(wù)配置的示例,感興趣的可以了解一下
    2024-05-05
  • Springboot如何獲取上下文ApplicationContext

    Springboot如何獲取上下文ApplicationContext

    這篇文章主要介紹了Springboot如何獲取上下文ApplicationContext,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Mybatis SQL日志如何轉(zhuǎn)換為可執(zhí)行sql

    Mybatis SQL日志如何轉(zhuǎn)換為可執(zhí)行sql

    這篇文章主要介紹了Mybatis SQL日志如何轉(zhuǎn)換為可執(zhí)行sql問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • RocketMq 消息重試機制及死信隊列詳解

    RocketMq 消息重試機制及死信隊列詳解

    這篇文章主要為大家介紹了RocketMq 消息重試機制及死信隊列詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • Java調(diào)整圖片大小的3種方式小結(jié)

    Java調(diào)整圖片大小的3種方式小結(jié)

    在軟件開發(fā)中處理圖像是一個常見任務(wù),特別是當我們需要優(yōu)化圖像尺寸以適應(yīng)不同的應(yīng)用場景時,這篇文章主要介紹了Java調(diào)整圖片大小的3種方式,需要的朋友可以參考下
    2024-09-09
  • Springboot?Filter中注入bean無效為null問題

    Springboot?Filter中注入bean無效為null問題

    這篇文章主要介紹了Springboot?Filter中注入bean無效為null問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 初次體驗MyBatis的注意事項

    初次體驗MyBatis的注意事項

    今天給大家?guī)淼氖顷P(guān)于MyBatis的相關(guān)知識,文章圍繞著MyBatis的用法展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Java如何實現(xiàn)數(shù)字逆序

    Java如何實現(xiàn)數(shù)字逆序

    這篇文章主要介紹了Java如何實現(xiàn)數(shù)字逆序問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • 掌握模塊化開發(fā)Spring Boot子模塊使用技巧

    掌握模塊化開發(fā)Spring Boot子模塊使用技巧

    這篇文章主要為大家介紹了掌握模塊化開發(fā)Spring Boot子模塊使用技巧詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • 詳解RabbitMQ中延遲隊列結(jié)合業(yè)務(wù)場景的使用

    詳解RabbitMQ中延遲隊列結(jié)合業(yè)務(wù)場景的使用

    這篇文章主要介紹了詳解RabbitMQ中延遲隊列結(jié)合業(yè)務(wù)場景的使用,延遲隊列中的元素都是帶有時間屬性的,延遲隊列就是用來存放需要在指定時間被處理的元素的隊列,需要的朋友可以參考下
    2023-05-05

最新評論

外汇| 建湖县| 九龙县| 双牌县| 南乐县| 大余县| 淳安县| 石景山区| 福建省| 锡林郭勒盟| 邛崃市| 五台县| 江山市| 甘肃省| 林甸县| 政和县| 县级市| 嘉兴市| 大丰市| 安义县| 竹山县| 友谊县| 黑龙江省| 辽中县| 闻喜县| 东辽县| 牙克石市| 康平县| 玉溪市| 通江县| 凌云县| 肃宁县| 泽州县| 东方市| 长丰县| 蕲春县| 文安县| 余江县| 十堰市| 竹北市| 雅江县|