Maven 坐標有groupId,artifactId,packaging,version,classifier
- <groupId>com.x</groupId>
- <artifactId>helloworld-1</artifactId>
- <packaging>jar</packaging>
- <version>0.0.1-SNAPSHOT</version>
(1).groupId,定義當前maven項目隸屬的實際項目。首先,maven項目和實際項目不一定是一對一的關系。比如SpringFramework這一實際項目,其對應的maven項目會有很 多,如: spring-core,spring-context等。這是由于maven中模塊的概念,因此,一個實際項目往往會被劃分成很多模塊。其次,groupId不應該對應項目隸屬的組織或公司。原因很簡單,一個組織下會有很多個實際項目,如果groupId只定義到組織級別,而后面我們會看到,artifactId只能定義maven項目(模塊),那么實際項目這個層將難以定義。最后,groupId的表示方式與java包名的表示方式類似,通常與域名反向一一對應。
(2).artifactId,該元素定義實際項目中的一個maven項目(模塊),推薦的做法是使用實際項目名稱作為artifactId前綴,這樣做的好處是方便尋找實際構件。在默認情況下,maven生成的構件,其文件名會以artifactId作為開頭,如:helloworld-1-0.0.1-SNAPSHOT.jar,使用實際項目名稱作為前綴之后,就能方便從一個lib文件夾中找到某個項目的一組構件。。
(3).version,該元素定義maven項目當前所處的版本,如:helloworld-1-0.0.1-SNAPSHOT.jar的版本是0.0.1。需要注意的是,maven定義了一套完整的版本規范,以及快照(SNAPSHOT)的概念。
(4).packaging, 定義了maven項目的打包方式。默認值為jar,可取值:ejb / ejb3 /jar / par / rar / war。
(5).classifier,該元素用來幫助定義構建輸出的一些附屬構件。附屬構件與主構件對應,如上例中的主構件是: nexus-indexer-2.0.0.jar,該項目可能還會通過使用一些插件生成如:helloworld-1-0.0.1-SNAPSHOT-javadoc.jar、helloworld-1-0.0.1-SNAPSHOT-sources.jar這樣一些附屬構件,其包含了java文檔和源代碼。這時候,javadoc和sources就是這兩個附屬構件的classifier。這樣,附屬構件也就擁有了自己唯一的坐標。
項目構件的文件名是與坐標相對應, 規則為: artifactId-version[-classifier].packaging,[-classifier]為可選。