项目基础信息
标签 | 类型 | 描述 | 示例 |
---|---|---|---|
modelVersion | String | 声明项目描述符遵循哪一个POM模型版本。 | <modelVersion>4.0.0</modelVersion> |
Parent | Parent | 父项目的坐标。如果存在就直接说明并给出坐标(group ID, artifact ID ,version) | ![]() |
groupId | String | 项目的一个全局惟一的标识符。 | <groupId>com.cupd.milkyway</groupId> |
artifactId | String | groupId之下的唯一模块ID,它和groupId一起唯一标识一个构件。 | <artifactId>milkyway-pc</artifactId> |
Version | String | 项目的版本 | <version>1.0-SNAPSHOT</version> |
Packaging | String | 项目的打包类型,例如:jar、war、ear、pom。 默认的类型是:jar | <packaging>pom</packaging> |
Name | String | 项目的名称, Maven产生的文档用。 | <name>banseon-maven</name> |
description | String | 项目的详细描述, Maven 产生的文档用。 | <description>A maven project to study maven.</description> |
url | String | 项目主页的URL, Maven产生的文档用 | <url>http://www.baidu.com/banseon</url> |
inceptionYear | String | 项目创建年份,4位数字。当产生版权信息时需要使用这个值。 | 一般不用 |
organization | Organization | 项目所属组织的各种属性(版权声明和链接等) | 一般不用 |
licenses/license* | List<license> | 项目许可授权等 | 一般不用 |
developers/developer* | List<developer> | 项目开发者 | 一般不用 |
contributors/contributor* | List<contributor> | 贡献者 | 一般不用 |
mailingLists/mailingList* | List<mailingList> | 项目邮件列表 | 一般不用 |
注1:父级项目中的pom.xml文件使用的packaging配置一定为pom。父级的pom文件只作项目的子模块的整合,在maven install时不会生成jar/war压缩包。
注2:当pom文件中没有设置packaging参数时,默认使用jar方式打包。即<packaging>jar</packaging>。
<packaging>jar</packaging>和<packaging>war</packaging>区别?
<packaging>jar</packaging>意味着在maven build时会将这个项目中的所有java文件都进行编译形成.class文件,且按照原来的java文件层级结构放置,最终压缩为一个jar文件,放在与src文件夹同级的target文件夹。
<packaging>war</packaging>与jar包非常相似,同样是编译后的.class文件按层级结构形成文件树后打包形成的压缩包。不同的是,它会将项目中依赖的所有jar包都放在WEB-INF/lib这个文件夹下。WEB-INF/classes文件夹仍然放置我们自己代码的编译后形成的内容。
项目管理信息
标签 | 类型 | 描述 | 示例 |
---|---|---|---|
prerequisites | prerequisites | 项目构建的先决条件,一般配置所需要的Maven的最低版本 | 一般不用 |
scm | scm | 允许你配置你的代码库,供Maven web站点和其它插件使用。 | ![]() |
issueManagement | IssueManagement | 项目信息管理。项目的问题管理系统(Bugzilla, Jira, Scarab,或任何你喜欢的问题管理系统)的名称和URL | ![]() |
ciManagement | ciManagement | 项目持续集成信息。持续集成系统的名字,例如continuum | 一般不用 |
distributionManagement | distributionManagement | 项目部署管理。项目分发信息,在执行mvn deploy后表示要发布的位置。有了这些信息就可以把网站部署到远程服务器或者把构件部署到远程仓库。 | ![]() |
distributionManagement
项目分发信息,在执行mvn deploy后表示要发布的位置。有了这些信息就可以把网站部署到远程服务器或者把构件部署到远程仓库。 它主要是用于部署的工件和生成的网站建设。
元素 | 类型 | 描述 |
---|---|---|
Repository | repository | release发布远程存储库。 |
snapshotRepository | repository | snapshot快照发布远程存储库。 如果没有,它默认 < repository > 元素。 |
Site | Site | 部署项目的web站点所需的信息。 |
downloadUrl | String | 项目的下载页面的URL。 如果没有用户将提到的主页 。 这是给协助定位构件库中没有由于许可限制。 |
relocation | relocation | 工件的搬迁信息如果已经搬到一个新的组ID和/或工件ID。 |
status | String |
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>net.aty.mybatis</groupId>
<artifactId>mybatis-demo</artifactId>
<packaging>jar</packaging>
<version>${project.release.version}</version>
<name>mybatis-demo</name>
<url>http://maven.apache.org</url>
<properties>
<project.release.version>0.1-SNAPSHOT</project.release.version>
</properties>
<profiles>
<profile>
<id>release</id>
<properties>
<project.release.version>0.1</project.release.version>
</properties>
</profile>
</profiles>
<!--定义snapshots库和releases库的nexus地址-->
<distributionManagement>
<repository>
<id>nexus-releases</id>
<url>
http://172.17.103.59:8081/nexus/content/repositories/releases/
</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<url>
http://172.17.103.59:8081/nexus/content/repositories/snapshots/
</url>
</snapshotRepository>
</distributionManagement>
</project>
maven中的仓库分为两种,snapshot快照仓库和release发布仓库。snapshot快照仓库用于保存开发过程中的不稳定版本,release正式仓库则是用来保存稳定的发行版本。
- 如果是快照版本,那么在mvn deploy时会自动发布到快照版本库中,而使用快照版本的模块,在不更改版本号的情况下,直接编译打包时,maven会自动从镜像服务器上下载最新的快照版本。
- 如果是正式发布版本,那么在mvn deploy时会自动发布到正式版本库中,而使用正式版本的模块,在不更改版本号的情况下,编译打包时如果本地已经存在该版本的模块则不会主动去镜像服务器上下载。
注:maven会根据模块的版本号(pom文件中的version)中是否带有-SNAPSHOT(注意这里必须是大写)来判断是快照版本还是正式版本。
如果你的镜像服务器需要用户名和密码,那么还需要在maven的settings.xml文件中配置<server>,注意id必须和pom文件中的distributionManagement对应仓库的id保持一致。
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
上述例子通过profile的定义就可以在发布灵活切换snapshot快照版本和release正式版本。
- 如果在发布时使用mvn deploy -P release 命令,那么会自动使用0.1作为发布版本,那么根据maven处理snapshot和release的规则,由于版本号后不带-SNAPSHOT故当成是正式发布版本,会被发布到release仓库;
- 如果在发布时使用mvn deploy命令,那么就会使用默认的版本号0.1-SNAPSHOT,此时maven会认为是快照版本,会自动发布到快照版本库。
项目构建依赖信息
标签 | 类型 | 描述 | 示例 |
---|---|---|---|
modules/module* | List<String> | 父项目包含的模块 | ![]() |
properties/key=value* | properties | 属性配置项。设置依赖包版本号以及项目相关属性变量值 | ![]() |
dependencyManagement | List<dependency> | 父项目统一管理项目的依赖项信息,子项目默认继承这些依赖项信息。 | ![]() |
dependencies/dependency* | List<dependency> | 描述了当前项目的依赖项信息 | 父项目: ![]() ![]() |
repositories/repository* | List<repository> | 依赖和扩展的远程仓库列表。 | ![]() |
pluginRepositories/pluginRepository* | List<pluginRepository> | 插件的远程仓库列表,这些插件用于构建和报表。 | ![]() |
build | build | 构建项目所需的信息。 | ![]() |
reporting | reporting | 这个元素包括报告的规范插件使用Maven-generated网站生成报告。 | 不常用 |
profiles/profile* | List<profile> | 构建配置文件的清单,可以根据不同的环境配置不同的配置项信息。 | 图片1 |
modules
- 使用多模块的Maven配置,可以帮助项目划分模块,整体项目结构更清晰。
- 由于依赖的传递性,可以使子模块的POM精简,方便单个模块的构建,而不用每次都构建整个项目。
- 父模块统一管理依赖包版本。
详见《Maven-modules》
dependencyManagement
父项目统一管理项目的依赖项信息,子项目默认继承这些依赖项信息。
这些依赖信息不会被立即解析,必须当子项目声明一个依赖(必须描述group ID和 artifact ID信息),如果group ID和artifact ID以外的一些信息没有描述,则通过group ID和artifact ID 匹配到这里的依赖,并使用这里的依赖信息。如果子项目声明了版本号,则会覆盖。
好处:统一管理项目的版本号,确保应用的各个项目的依赖和版本一致。如果某个子模块需要另外一个版本号时,只需要在dependencies中声明需要的版本号即可。子类就会使用子类声明的版本号,不继承于父类版本号。
详见《Maven-dependencyManagement和dependencies》
dependencies
相对于dependencyManagement,所有依赖在dependencies里的依赖都会自动引入,并默认被所有的子项目继承。
dependencyManagement和dependencies区别
- dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承)
- dependencyManagement里只是声明依赖,并不实现引入,因此子模块需要显式声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。
详见《Maven-dependencyManagement和dependencies》
build
项目构建打包通用信息。
使用maven构建的项目可以直接使用maven build完成项目的编译、测试、打包,无需额外配置。
build标签描述了如何编译及打包项目,具体的编译和打包工作是通过其中的plugin配置来实现的。当然,plugin不是必须的,即使不添加默认也会引入以下插件:
life cycle phase | plugin | 描述 |
---|---|---|
clean | maven-clean-plugin | 清理上一次执行创建的目标文件。 |
resources | maven-resources-plugin | 处理资源文件和测试资源文件。 |
compile | maven-compiler-plugin | 编译源文件和测试源文件。 |
test | maven-surefire-plugin | 执行测试文件。 |
jar | maven-jar-plugin | 创建jar。 |
install | maven-install-plugin | 安装jar。 |
deploy | maven-deploy-plugin | 发布jar。 |
build标签根据不同的位置分为两种:
- project build
- 全局配置。针对整个项目的所有情况都有效
- profile build
- 在profile标签中。针对不同的profile配置
详见《Maven-build》
reporting
描述使用报表插件产生报表的规范。
标签 | 类型 | 描述 |
---|---|---|
excludeDefaults | String | 默认值是false。如果这是真的,那么默认的报告不包括在站点的一代。 这包括报告的“项目信息”菜单。 |
outputDirectory | String | 存储所有生成的报告的地址。 默认值是$ { project.build.directory } /site。 |
plugins | List | 报告使用和配置插件。 |
不常用,不做说明。
profile
根据环境参数或命令行参数激活某个构建处理。
标签 | 类型 | 描述 |
---|---|---|
id | String | 构建配置的唯一标识符。即用于命令行激活,也用于在继承时合并具有相同标识符的profile。 |
activation | activation | 自动触发profile的条件逻辑。Activation是profile的开启钥匙。 |
build | build | 项目构建所需的信息。 |
modules | List<String> | 模块 |
distributionManagement | distributionManagement | 项目发布信息 |
properties | key/value | 配置项 |
dependencyManagement | List<dependency> | 默认继承这一项目的依赖信息。 |
dependencies | List<dependency> | 描述所有与这个项目相关的依赖信息。 |
repositories | List<repository> | 依赖和扩展的远程仓库列表。 |
pluginRepositories | pluginRepository | 插件的远程仓库列表 |
reporting | reporting | 描述使用报表插件产生报表的规范 |
详见《Maven-profile》
参考文档:
https://www.iteye.com/blog/874395012-2379515