1.maven-jar-plugin用於生成META-INF/MANIFEST.MF文件的部份內容,<mainClass>com.xxg.Main</mainClass>指定MANIFEST.MF中的Main-Class,<addClasspath>true</addClasspath>會在MANIFEST.MF加上Class-Path項並配置依賴包,<classpathPrefix>lib/</classpathPrefix>指定依賴包所在目錄
2.GroupId和ArtifactId被統稱爲「座標」是爲了保證項目惟一性而提出的,GroupId通常分爲多個段,這裏只說兩段,第一段爲域,第二段爲公司名稱。域又分爲org、com、cn等等許多,其中org爲非營利組織,com爲商業組織。舉個apache公司的tomcat項目例子:這個項目的GroupId是org.apache,它的域是org(由於tomcat是非營利項目),公司名稱是apache,ArtifactId是tomcat。apache
3.包名前綴通常和groupId有關
eg:<groupId>com.goldsign</groupId>
<artifactId>metroHceService</artifactId>
<version>1.0-SNAPSHOT</version>
複製代碼
4.在Maven依賴管理中,惟一標識一個依賴項是由該依賴項的三個屬性構成的,分別是groupId、artifactId以及version。這三個屬性能夠惟一肯定一個組件(Jar包或者War包)
5.Maven的Snapshot版本與Release版本
緩存
1. snapshot版本表明不穩定、尚處於開發中的版本
2. release版本則表明穩定的版本
3. 什麼狀況下該用SNAPSHOT?
協同開發時,若是A依賴構件B,因爲B會更新,B應該使用SNAPSHOT來標識本身。這種作 法的必要性能夠反證以下:
a.若是B不用SNAPSHOT,而是每次更新後都使用一個穩定的版本,那版本號就會升得太 快,天天一升甚至每一個小時一升,這就是對版本號的濫用。
b.若是B不用SNAPSHOT, 但一直使用一個單一的Release版本號,那當B更新後,A可能並不 會接受到更新。由於A所使用的repository通常不會頻繁更新release版本的緩存(即本地 repository),因此B以不換版本號的方式更新後,A在拿B時發現本地已有這個版本,就不會 去遠程repository下載最新的B
4. 不用release版本,在全部地方都用SNAPSHOT版本行不行?
不行。正式環境中不得使用snapshot版本的庫。 好比說,今天你依賴某個snapshot版本的 第三方庫成功構建了本身的應用,明天再構建時可能就會失敗,由於今晚第三方可能已經更 新了它的snapshot庫。你再次構建時,Maven會去遠程repository下載snapshot的最新版 本,你構建時用的庫就是新的jar文件了,這時正確性就很難保證了。