pom,Project Object Model,项目对象模型
一般maven项目通过pom.xml文件配置项目,以下为常用属性
属性
artifactId
项目的通用名称
groupId
项目或者组织的唯一标志,并且配置时生成的路径也是由此生成.,一般在仓库中的位置一般有一部分是该相对路径
例如com.mycompany.app生成的相对路径为:/com/mycompany/app
packaging
打包的机制,如pom, jar, maven-plugin, ejb, war, ear, rar, par,maven-archetype
pom
pom文件一个重要的属性就是packaging(打包类型),pom的意思是使用maven分模块管理
一般具有module的父级项目的pom文件中都有pom设置,packaging默认类型jar类型,如果不做配置,maven会将该项目打成jar包
maven-archetype:
用于声明archetype 项目,而且需要以下两个条件:
1)必须添加插件的扩展
2)确保build可重用,必须具有锁定archetype插件的版本,在pluginManagement中
<project>
<packaging>maven-archetype</packaging>
......
<build>
<extensions>
<extension>
<groupId>org.apache.maven.archetype</groupId>
<artifactId>archetype-packaging</artifactId>
<version>3.0.1</version>
</extension>
</extensions>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-archetype-plugin</artifactId>
<version>3.0.1</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
scm-Software Configuration Management
项目在 svn/git 上对应的资源
<!-- domain: 经常用到的个人或公司 git 地址域名-->
<!-- path: 项目git中间用到的固定路径。例如 '/departname/teamname/' -->
<scm>
<url>http://git.domain.cn/path/parent-maven-archetype.git</url>
<connection>scm:git:http://git.domain.cn/path/parent-maven-archetype.git</connection>
<developerConnection>scm:git:http://git.domain.cn/path/parent-maven-archetype.git</developerConnection>
</scm>
build
主要是用于引入用于构建时引用的包
distributionManagement
用于配置分发管理,配置相应的产品发布信息,主要用于发布,在执行mvn deploy后表示要发布的位置
mvn install 会将项目生成的构件安装到本地Maven仓库,mvn deploy 用来将项目生成的构件分发到远程Maven仓库。本地Maven仓库的构件只能供当前用户使用,在分发到远程Maven仓库之后,所有能访问该仓库的用户都能使用你的构件
配置POM的来指定Maven分发构件的位置:
<distributionManagement>
<repository>
<id>Release</id>
<name>Nexus Release</name>
<url>http://alm.dnsdomain.cn/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>Snapshot</id>
<name>Nexus Snapshots</name>
<url>http://alm.dnsdomain.cn/nexus/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
如果是快照版本(Snapshot),执行mvn deploy时会自动发布到快照版本库中。而使用快照版本的模块,在不更改版本号的情况下,直接编译打包时,maven会自动从镜像服务器上下载最新的快照版本。
如果是正式发布版本(Release),那么在执行mvn deploy时会自动发布到正式版本库中,而使用正式版本的模块。在不更改版本号的情况下,编译打包时,如果本地已经存在该版本的模块则使用本地的而不是主动去镜像服务器上下载。
本机安装的maven的conf文件夹中的settings.xml文件中,server元素下id的值必须与POM中repository或snapshotRepository下id的值完全一致。将认证信息放到settings下而非POM中,是因为POM往往是它人可见的,而settings.xml是本地使用的
<settings>
...
<servers>
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>admin</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>admin</password>
</server>
</servers>
...
</settings>