maven

251 阅读3分钟
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。

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文件了,这时正确性就很难保证了。