POM是项目对象模型(Project Object Model)的简称,从前面的入门案例中,我们可以看到在项目根目录存在pom.xml文件,该文件是Maven项目核心配置文件。事实上,任何一个Maven项目都要求在根目录存放这样一个文件,即使该项目没有任何代码(如聚合或父级)。下面,让我们对pom.xml文件常用结构进行解读吧:
<!--文件根节点--> <project> <modelVersion> <!--POM版本声明--> <!--父级POM声明,如同 this_pom extends parent_pom,继承可实现消重--> <parent> <groupId/> <!--组织名称.项目名称,如 org.apache.maven--> <artifactId/> <!--模块名称,如 reporting--> <version/> <!--构件版本,如 1.0-SNAPSHOT--> <relativePath/> <!--父级pom.xml文件相对路径,缺省 ../pom.xml--> </parent> <groupId/> <artifactId/> <version/> <packaging/> <!--构件打包方式,常有jar,war,ear,pom,缺省jar--> <modules/> <!--子模块定义,通常是聚合项目时使用--> <!--属性定义,${spring.version}--> <properties> <key>value</key> </properties> <!--依赖管理,如定义spring, lucene, junit等资源的依赖--> <dependencies> <dependency> <groupId/> <artifactId/> <version/> </dependency> </dependencies> <plugins> <!--自定义插件<Maven已经为各生命周期事件提供了缺省的插件>--> <repositories/> <!--仓库定义--> <build/> <!--构建方式--> </project>
Note : 当然,Maven能为项目提供的服务能力还不止上面所描述的,包括(开发者信息,项目元数据信息,缺陷跟踪等),如果大家需要更完整的项目管理信息,可另行参考相关资源。
现在,让我们对pom.xml文件结构进行梳理:
1.坐标信息(通过 groupId,artifactId,version 确定)
2.继承与聚合(parent, modules)
3.依赖管理(dependencies)
4.仓库管理(repositories)
5.插件管理(plugins)
坐标信息
Maven不仅是一个项目管理工具,还是开源项目信息管理平台。只要你有好的项目,都可以发布到Maven中央仓库中,供大家下载使用。那么众多项目构件就是通过坐标方式管理的,可以把中央仓库想象成一个三维空间,每一点(groupId,artifactId,version)即代表一个构件。如同我们在dependency中使用三方构件一样,只需要提供坐标信息即可。
继承与聚合
通常我们会将项目分成若干模块进行开发,各模块相对独立,却又会共享一点基础信息。这时就可以通过继承,避免共享信息的重复定义。Maven通过关键字 parent 定义父子关系。
子模块可独立于其它模块开发,当我想把各模块组织起来,构成一个项目时,就可以使用聚合(modules)实现。
这是Maven源码包中pom.xml的代码,可以看出maven也是通过分模块开发,然后再聚合起来的。
<modules> <module>maven-plugin-api</module> <module>maven-model</module> <module>maven-core</module> <module>maven-settings</module> <module>maven-artifact</module> </modules>
依赖管理
通过Maven我们不需要手动下载jar包添加到classpath。使用dependency关键字及构件坐标信息,可以向仓库发出请求,自动下载构件并安装依赖关系。实践中,我们还会碰到包冲突的问题,比如:A和B两个包都依赖C,对C的版本要求还不一样,这时往往会出现不可预知的问题。后面我们会用单独的一个章节讲解Maven依赖管理。
仓库管理
Maven仓库分为两种,本地仓库和远程仓库。
本地仓库缺省安装路径在用户目录下,如:C:\Users\Administrator\.m2\repository,可修改setting.xml文件中的localRepository更换。
远程仓库主要有三种类型:私服,中央仓库及其他公共库。私服需要我们自己搭建(如Nexus),中央仓库指的是Maven中央仓库,其他公共库指某些因版权问题而无法托管在中央仓库的构件库。
当我们执行构建任务时,寻找路径优先级依次为:本地仓库 -> 私服 -> 中央仓库。
插件管理
Maven已经为各生命周期构建目标提供了缺省的内置插件绑定,如mvn test的surefire插件,同时也支持更丰富自定义插件使用。
至此,我们对POM文件的结构有了大致的了解,下面,让我们近距离看看Maven的依赖管理吧!
参考:
http://maven.apache.org/ref/3.3.3/maven-model/maven.html
相关推荐
它基于项目对象模型(Project Object Model,POM)的概念,使得项目的构建、依赖管理以及报告变得简单且规范。Maven通过读取POM.xml配置文件,自动处理构建过程,包括编译、测试、打包、部署等步骤。 "apache-maven...
它基于项目对象模型(Project Object Model,POM)的概念,能够自动化构建过程,管理依赖关系,并提供一套标准的项目结构。Apache Maven 3.6.0是Maven的一个稳定版本,引入了多项改进和优化,旨在提高开发效率和构建...
它的核心概念是项目对象模型(Project Object Model,POM),这是一个XML文件,包含了项目的配置信息,如项目依赖、构建目标、构建插件等。 在“apache-maven-3.9.6-bin”压缩包中,你会找到以下关键组件: 1. `...
基于项目对象模型 (POM) 的概念,Maven 可以从一条中央信息中管理项目的构建、报告和文档。 压缩包内容: apache-maven-3.8.1-bin.zip、 apache-maven-3.8.1-bin.tar.gz、 apache-maven-3.8.1-src.zip、 apache-...
Maven使用项目对象模型(Project Object Model,POM)来描述项目,并自动管理项目的构建、报告和文档生成。 2. POM.xml:每个Maven项目都有一个POM.xml文件,这是项目的核心。它包含了项目的基本信息,如groupId、...
1. **项目对象模型 (POM)**:Maven 的核心概念是 POM,这是一个XML文件,包含了项目的基本信息,如项目名称、版本、描述、开发者信息,以及项目的依赖、构建配置等。POM 文件位于项目的根目录下,名为 `pom.xml`。 ...
Apache Maven 是一个强大的Java项目管理和综合工具,它基于项目对象模型(Project Object Model,POM)的概念,使得构建、依赖管理和文档生成变得简单。Maven 3.8.4是该工具的一个稳定版本,提供了多项改进和修复,...
4. **生成项目**:输入完毕后,Maven会根据archetype创建一个新的项目结构,包括`src/main/java`(源代码)、`src/main/resources`(资源文件)、`src/test/java`(测试代码)和`pom.xml`(项目对象模型,Maven的...
它通过一个名为`pom.xml`的项目对象模型(Project Object Model)文件来管理项目的依赖关系、构建生命周期和构建目标。在`pom.xml`中,开发者可以声明项目依赖、插件、构建目标等信息,Maven会自动下载所需的库文件...
它通过使用一种标准化的项目对象模型(Project Object Model,POM),可以帮助开发者管理项目的依赖、构建过程以及报告。Apache Maven 3.8.1是Maven的最新稳定版本,提供了更高效和优化的构建体验。 **Maven ...
它基于项目对象模型(Project Object Model,POM)的概念,使得项目的构建、依赖管理、文档生成、代码质量检查等任务变得简单。Apache Maven 3.8.4是该工具的一个版本更新,包含了对之前版本的改进和修复。 在Maven...
在这个版本中,我们可以看到Maven如何通过其标准化的项目对象模型(Project Object Model,POM)和丰富的插件生态系统,简化了Java开发流程。 首先,Maven的POM是一个XML文件,包含了项目的配置信息,如项目依赖、...
它基于项目对象模型(Project Object Model,POM)的概念,能够管理项目的构建、报告和文档,极大地简化了软件开发过程。Maven 3.3.9是该工具的一个稳定版本,发布于2015年,提供了许多改进和修复。 **1. POM (项目...
Maven的中心概念是项目对象模型(POM),它是XML文件,包含了关于项目的所有重要信息,例如项目依赖,开发者列表,版本控制系统,构建执行计划等。POM文件位于项目的根目录下,通常命名为pom.xml。这个文件通过一...
它基于项目对象模型(Project Object Model,POM)的概念,能够管理项目的构建、报告和依赖关系。Maven 的目标是简化项目构建过程,通过标准化构建生命周期和插件机制,使得开发者可以更专注于编写代码,而不是配置...
它基于项目对象模型(Project Object Model,POM)的概念,能够管理项目的构建、报告和文档。Maven 3.6.0是该工具的一个稳定版本,提供了许多改进和新特性。 在Maven 3.6.0中,用户可以体验到更快的构建速度和更高...
Apache Maven 是一个强大的Java项目管理工具,它基于项目对象模型(Project Object Model,POM)的概念,能够自动化构建、依赖管理和项目信息管理。Maven 3.5.4是Maven的一个稳定版本,包含了多项改进和修复,为...
它基于项目对象模型的概念,通过一个中央信息管理文件(pom.xml),来管理项目的构建,报告和文档。Maven不仅能够处理编译,分配,文档生成等任务,还能与其他工具集成,比如单元测试,代码覆盖工具,SCM,发布管理...
Apache Maven是一个基于项目对象模型(POM)的项目管理工具,主要服务于Java项目。它通过一个中央信息管理的方式来管理项目构建、报告和文档。Apache Maven 3.6.3是该工具的一个版本,提供了一套完整的构建生命周期...
Maven采用了项目对象模型(POM)的概念,可以用来管理项目的编译、构建、文档生成、报告以及依赖等。Maven能够帮助开发者自动化他们的构建流程,从构建简单的单模块到复杂的多模块项目。 标题中提到的apache-maven-...