邏輯表示方式
,而構件的物理表示方式
是文件。~/.m2/respository
目錄,用戶能夠自定義本地倉庫目錄,在~/.m2/settings.xml
文件中進行修改:web
<localRepository>/Users/john/dev/repository</localRepository>
使用本地項目構件:將本地項目構件安裝到maven本地倉庫spring
john:demo1 john$ mvn clean install
在maven的超級pom中能夠看到默認的中央倉庫。apache
${M2_HOME}/lib/maven-model-builder-3.6.3.jar
找到中央倉庫的默認配置:maven
<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>
默認的中央倉庫:佈局
私服的好處:測試
配置信息ui
<project> ... <repositories> <repository> <id>aliyun-repo</id> <name>aliyun repo</name> <url>https://maven.aliyun.com/repository/public</url> <releases> <enabled>true</enabled> <!-- updatePolicy 默認值daily --> <updatePolicy>daily</updatePolicy> <checksumPolicy>ignore</checksumPolicy> </releases> <snapshots> <!-- 不下載快照版本構件 --> <enabled>false</enabled> </snapshots> <layout>default</layout> </repository> </repositories> ... </project>
repositories->repository
元素說明url
repositories
元素下可使用repository
子元素聲明一個或多個遠程倉庫。id
:遠程倉庫標識,id名稱惟一。注意:maven自帶的中央倉庫id爲central
,若是其餘的倉庫聲明也使用該id,會覆蓋中央倉庫的配置。url
:遠程倉庫地址。releases
:用來控制對於發佈版本構件的下載。代理
enabled
屬性表示是否開啓發布版本的下載支持。updatePolicy
:用來配置maven從遠程倉庫更新的頻率。code
daily
,表示天天檢查一次。never
,從不檢查更新。always
,每次構建都檢查更新。interval: X
,每隔X分鐘檢查更新一次(X爲任意整數)checksumPolicy
:用來配置maven檢查校驗和文件的策略。
warn
,執行構建時給出警告信息。fail
,遇到校驗和錯誤,就讓構建失敗。ignore
,讓maven徹底忽略校驗和錯誤。snapshots
:用來控制對於快照版本構件的下載。
enabled
屬性表示是否開啓快照版本的下載支持。-SNAPSHOT
結尾,發佈版本沒有這個標識。layout
:default
表示倉庫的佈局是maven2或者maven3的默認佈局,而不是maven1的佈局。測試遠程倉庫可否正常拉取依賴
${localRepository}
/org/springframework/spring-web目錄文件,此時本地倉庫無依賴。/Users/john/Desktop/demo1
,在終端執行mvn compile
查看終端輸出。
john:demo1 john$ mvn compile [INFO] Scanning for projects... [INFO] [INFO] ---------------------------< com.john:demo1 >--------------------------- [INFO] Building demo1 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- Downloading from aliyun-repo: https://maven.aliyun.com/repository/public/org/springframework/spring-web/5.2.1.RELEASE/spring-web-5.2.1.RELEASE.pom Downloaded from aliyun-repo: https://maven.aliyun.com/repository/public/org/springframework/spring-web/5.2.1.RELEASE/spring-web-5.2.1.RELEASE.pom (1.9 kB at 5.0 kB/s) Downloading from aliyun-repo: https://maven.aliyun.com/repository/public/org/springframework/spring-web/5.2.1.RELEASE/spring-web-5.2.1.RELEASE.jar Downloaded from aliyun-repo: https://maven.aliyun.com/repository/public/org/springframework/spring-web/5.2.1.RELEASE/spring-web-5.2.1.RELEASE.jar (1.4 MB at 6.3 MB/s) [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ demo1 --- [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory /Users/john/Desktop/demo1/demo1/src/main/resources [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ demo1 --- [INFO] Nothing to compile - all classes are up to date [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.565 s [INFO] Finished at: 2019-12-15T13:38:51+08:00 [INFO] ------------------------------------------------------------------------
Downloading from aliyun-repo
後面就是在pom文件中配置的遠程倉庫,aliyun-repo
是定義的倉庫id。 在本地倉庫缺乏依賴後,就會從配置的遠程倉庫下載依賴。什麼是鏡像倉庫?
配置鏡像倉庫
<mirrors> <mirror> <id>aliyun-maven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors>
配置解釋
mirrors
元素下包含多個mirror
子元素,每一個mirror元素表示一個遠程鏡像。id
:鏡像id,惟一標識。name
:鏡像名稱。url
:鏡像地址mirrorOf
:指定哪些遠程倉庫的id使用這個鏡像去下載構件,這個對應pom.xml文件中repository元素的id。就是表示這個鏡像是給哪些pom.xml文件中的遠程倉庫使用的,這裏面須要列出遠程倉庫的id,多個之間用逗號隔開。mirrorOf
配置語法:
<mirrorOf> * </mirrorOf>
:匹配全部遠程倉庫。<mirrorOf>external: * </mirrorOf>
:匹配全部不在本機上的遠程倉庫。<mirrorOf> repo1, repo2 </mirrorOf>
:匹配倉庫repo1和repo2,多個倉庫之間使用逗號分割。<mirrorOf> *, !repo1 </mirrorOf>
:匹配全部遠程倉庫,除了倉庫repo1,使用感嘆號(!
)將倉庫從匹配中排除。舉例
項目demo1 pom文件的依賴
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>5.2.1.RELEASE</version> </dependency>
查看spring-web的jar包在本地倉庫中的位置。
/Users/john/dev/repository/org/springframework/spring-web/5.2.1.RELEASE/spring-web-5.2.1.RELEASE.jar
/Users/john/dev/repository
是本地倉庫目錄。groupId/artifactId/version/
artifactId-version[-classifier].packaging
, packaging默認爲jar。maven如何定位構件路徑
將groupId中的句點分隔符(.
)轉換成路徑分隔符(/
),同時在後面追加一個路徑分隔符(/
)。
org.springframework
--->org/springframework/
將artifactId拼接在1的路徑上, 同時在後面追加一個路徑分隔符(/
)。
org/springframework/spring-web/
將version拼接在2的路徑上,同時在後面追加一個路徑分隔符(/
)。
org/springframework/spring-web/5.2.1.RELEASE/
將構件名稱拼接在3的路徑上。
org/springframework/spring-web/5.2.1.RELEASE/spring-web-5.2.1.RELEASE.jar
依賴解析機制: