Maven實戰(zhàn)(5)坐標(biāo)詳解
1.為什么要定義Maven坐標(biāo)
在我們開發(fā)Maven項目的時候,需要為其定義適當(dāng)?shù)淖鴺?biāo),這是Maven強制要求的。在這個基礎(chǔ)上,其他Maven項目才能應(yīng)用該項目生成的構(gòu)件。
2.Maven坐標(biāo)詳解
Maven坐標(biāo)為各種構(gòu)件引入了秩序,任何一個構(gòu)件都必須明確定義自己的坐標(biāo),而一組Maven坐標(biāo)是通過一些元素定義的,它們是groupId,artifactId,version,packaging,class-sifer。下面是一組坐標(biāo)定義:
- <groupId>com.mycompany.app</groupId>
- <artifactId>my-app</artifactId>
- <packaging>jar</packaging>
- <version>0.0.1-SNAPSHOT</version>
下面講解一下各個坐標(biāo)元素:
groupId :定義當(dāng)前Maven項目隸屬的實際項目。首先,Maven項目和實際項目不一定是一對一的關(guān)系。比如SpringFrameWork這一實際項目,其對應(yīng)的Maven項目會有很多,如spring-core,spring-context等。這是由于Maven中模塊的概念,因此,一個實際項目往往會被劃分成很多模塊。其次,groupId不應(yīng)該對應(yīng)項目隸屬的組織或公司。原因很簡單,一個組織下會有很多實際項目,如果groupId只定義到組織級別,而后面我們會看到,artifactId只能定義Maven項目(模塊),那么實際項目這個層次將難以定義。最后,groupId的表示方式與Java包名的表達(dá)方式類似,通常與域名反向一一對應(yīng)。
artifactId : 該元素定義當(dāng)前實際項目中的一個Maven項目(模塊),推薦的做法是使用實際項目名稱作為artifactId的前綴。比如上例中的my-app。
version : 該元素定義Maven項目當(dāng)前的版本
packaging :定義Maven項目打包的方式,首先,打包方式通常與所生成構(gòu)件的文件擴展名對應(yīng),如上例中的packaging為jar,最終的文件名為my-app-0.0.1-SNAPSHOT.jar。也可以打包成war, ear等。當(dāng)不定義packaging的時候,Maven 會使用默認(rèn)值jar
classifier: 該元素用來幫助定義構(gòu)建輸出的一些附件。附屬構(gòu)件與主構(gòu)件對應(yīng),如上例中的主構(gòu)件為my-app-0.0.1-SNAPSHOT.jar,該項目可能還會通過一些插件生成如my-app-0.0.1-SNAPSHOT-javadoc.jar,my-app-0.0.1-SNAPSHOT-sources.jar, 這樣附屬構(gòu)件也就擁有了自己唯一的坐標(biāo)