中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》
  • 首頁 > 
  • 教程 > 
  • 開發技術 > 
  • 關于maven <repositories>標簽和<pluginRepositories>標簽的使用方法

關于maven <repositories>標簽和<pluginRepositories>標簽的使用方法

發布時間:2020-07-01 16:11:59 來源:億速云 閱讀:1133 作者:清晨 欄目:開發技術

不懂關于maven <repositories>標簽和<pluginRepositories>標簽的使用方法?其實想解決這個問題也不難,下面讓小編帶著大家一起學習怎么去解決,希望大家閱讀完這篇文章后大所收獲。

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

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

本地倉庫(.m2) vs. 遠程倉庫(聯網)

運行Maven的時候,Maven所需要的任何構件都是直接從本地倉庫獲取的。如果本地倉庫沒有,它會首先嘗試從遠程倉庫下載構件至本地倉庫,然后再使用本地倉庫的構件。

比如說,你的項目配置了junit-3.8的依賴,在你運行mvn test 的時候,Maven需要使用junit-3.8的jar文件,它首先根據坐標查找本地倉庫,如果找到,就直接使用。如果沒有,Maven會檢查可用的遠程倉庫配置,然后逐個嘗試這些遠程倉庫去下載junit-3.8的jar文件,如果遠程倉庫存在該文件,Maven會將其下載到本地倉庫中,繼而使用。如果嘗試過所有遠程倉庫之后,Maven還是沒能夠下載到該文件,它就會報錯。

Maven缺省的本地倉庫地址為${user.home}/.m2/repository 。也就是說,一個用戶會對應的擁有一個本地倉庫。

你也可以自定義本地倉庫的位置,修改${user.home}/.m2/settings.xml :

 <!-- localRepository
 | The path to the local repository maven will use to store artifacts.
 |
 | Default: ${user.home}/.m2/repository-->
 <localRepository>D:/.m2/repository</localRepository>

還可以在運行時指定本地倉庫位置:

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

還有一點需要理解的是,當我們運行install的時候,Maven實際上是將項目生成的構件安裝到了本地倉庫,也就是說,只有install了之后,其它項目才能使用此項目生成的構件。

接著了解一下Maven缺省的遠程倉庫,即Maven中央倉庫:

安裝好Maven之后,我們可以建立一個簡單的項目,配置一些簡單的依賴,然后運行mvn clean install,項目就構建好了。我們沒有手工的去下載任何jar文件,這一切都是因為Maven中央倉庫的存在,當Maven在本地倉庫找不到需要的jar文件時,它會查找遠程倉庫,而一個原始的Maven安裝就自帶了一個遠程倉庫——Maven中央倉庫。
這個Maven中央倉庫是在哪里定義的呢?在我的機器上,我安裝了maven-2.0.10,我可以找到這個文件:${M2_HOME}/lib/maven-2.0.10-uber.jar ,

但是到了3.xxx版本之后在: maven安裝目錄下的:/lib/maven-model-builder-${version}.jar中

打開該文件,能找到超級POM:\org\apache\maven\model\pom-4.0.0.xml ,它是所有Maven POM的父POM,所有Maven項目繼承該配置,你可以在這個POM中發現如下配置:

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

關于遠程倉庫的配置,下面的我會詳細解釋,這里我們只要知道,中央倉庫的id為central,遠程url地址為http://repo.maven.apache.org/maven2,它關閉了snapshot版本構件下載的支持。

在POM中配置遠程倉庫

前面我們看到超級POM配置了ID為central的遠程倉庫,我們可以在POM中配置其它的遠程倉庫。這樣做的原因有很多,比如你有一個局域網的遠程倉庫,使用該倉庫能大大提高下載速度,繼而提高構建速度,也有可能你依賴的一個jar在central中找不到,它只存在于某個特定的公共倉庫,這樣你也不得不添加那個遠程倉庫的配置。
這里我配置一個遠程倉庫指向中央倉庫的中國鏡像:

<project>
...
 <repositories>
 <repository>
  <id>maven-net-cn</id>
  <name>Maven China Mirror</name>
  <url>http://maven.net.cn/content/groups/public/</url>
  <releases>
  <enabled>true</enabled>
  </releases>
  <snapshots>
  <enabled>false</enabled>
  </snapshots>
 </repository>
 </repositories>
 <pluginRepositories>
 <pluginRepository>
  <id>maven-net-cn</id>
  <name>Maven China Mirror</name>
  <url>http://maven.net.cn/content/groups/public/</url>
  <releases>
  <enabled>true</enabled>
  </releases>
  <snapshots>
  <enabled>false</enabled>
  </snapshots> 
 </pluginRepository>
 </pluginRepositories>
...
</project>

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

關于<repositories>的更詳細的配置及相關解釋,請參考:http://www.sonatype.com/books/maven-book/reference_zh/apas02s08.html。

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

在settings.xml中配置遠程倉庫

我們知道了如何在POM中配置遠程倉庫,但考慮這樣的情況:在一個公司內部,同時進行這3個項目,而且以后隨著這幾個項目的結束,越來越多的項目會開始;同時,公司內部建立一個Maven倉庫。我們統一為所有這些項目配置該倉庫,于是不得不為每個項目提供同樣的配置。問題出現了,這是重復 !

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

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

<settings>
 ...
 <profiles>
 <profile>
  <id>dev</id>
  <!-- repositories and pluginRepositories here-->
 </profile>
 </profiles>
 <activeProfiles>
 <activeProfile>dev</activeProfile>
 </activeProfiles>
 ...
</settings>

這里我們定義一個id為dev的profile,將所有repositories以及pluginRepositories元素放到這個profile中,然后,使用<activeProfiles>元素自動激活該profile。這樣,你就不用再為每個POM重復配置倉庫。
使用profile為settings.xml添加倉庫提供了一種用戶全局范圍的倉庫配置。

使用鏡像

如果你的地理位置附近有一個速度更快的central鏡像,或者你想覆蓋central倉庫配置,或者你想為所有POM使用唯一的一個遠程倉庫(這個遠程倉庫代理的所有必要的其它倉庫),你可以使用settings.xml中的mirror配置。
以下的mirror配置用maven.NET.cn覆蓋了Maven自帶的central:

<settings>
...
 <mirrors>
 <mirror>
  <id>maven-net-cn</id>
  <name>Maven China Mirror</name>
  <url>http://maven.net.cn/content/groups/public/</url>
  <mirrorOf>central</mirrorOf>
 </mirror>
 </mirrors>
...
</settings>

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

 <mirrors>
 <!-- mirror
  | Specifies a repository mirror site to use instead of a given repository. The repository that
  | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
  | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
  |
  -->
 <mirror>
  <id>nexus</id>
  <mirrorOf>*</mirrorOf>
  <name>Nexus Mirror</name>
  <url>http://xx.xx/nexus/content/groups/public</url>
 </mirror>
 </mirrors>
<settings>
...
 <mirrors>
 <mirror>
  <id>my-org-repo</id>
  <name>Repository in My Orgnization</name>
  <url>http://192.168.1.100/maven2</url>
  <mirrorOf>*</mirrorOf>
 </mirror>
 </mirrors>
...
</settings>

感謝你能夠認真閱讀完這篇文章,希望小編分享關于maven <repositories>標簽和<pluginRepositories>標簽的使用方法內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

济南市| 呼伦贝尔市| 北安市| 岳池县| 郴州市| 黄平县| 静安区| 博白县| 娱乐| 青浦区| 卫辉市| 盐亭县| 江城| 乡宁县| 赤城县| 辽阳市| 上虞市| 北宁市| 巴林右旗| 邳州市| 崇礼县| 台东市| 恭城| 丹寨县| 汶上县| 河曲县| 台江县| 云和县| 开江县| 新河县| 丰城市| 外汇| 峡江县| 大渡口区| 通化县| 永州市| 曲靖市| 深州市| 奉化市| 廉江市| 手游|