关于pom文件的描述

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于pom文件的描述相关的知识,希望对你有一定的参考价值。

参考技术A POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。执行任务或目标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执行目标。POM 中可以指定以下配置:1.项目依赖 2.插件 3.执行目标 4.项目构建 profile 5.项目版本 6.项目开发者列表 7.相关邮件列表信息

所有 POM 文件都需要 project 元素和三个必需字段:groupId,artifactId,version。

<?xml version="1.0" encoding="UTF-8"?>开头可以定义一下格式

<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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">

<!-- 模型版本 -->    

<modelVersion>4.0.0</modelVersion>    

<!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如com.companyname.project-group,maven会将该项目打成的jar包放本地路径:/com/companyname/project-group -->    

<groupId>com.companyname.project-group</groupId>

<!-- 项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 artifactId这是工程的标识。它通常是工程的名称。例如,消费者银行。groupId 和 artifactId 一起定义了 artifact 在仓库中的位置。-->  

<artifactId>project</artifactId>    

<!-- 版本号 在 artifact 的仓库中,它用来区分不同的版本。例如:-->    

<version>1.0</version></project>

<packaging>打包机制,如pom,jar,maven-plugin,ejb,war,ear,rar,par

<url>应该是只是写明开发团队的网站,无关紧要,可选

<name>用户描述项目的名称,无关紧要的东西,可选

其中groupId,artifactId,version,packaging这四项组成了项目的唯一坐标。) 一般情况下,前面三项就可以组成项目的唯一坐标了。

引入依赖的固定写法

<dependencies>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

</dependencies>

properties:是为pom定义一些常量,在pom中的其它地方可以直接引用。

定义方式如下:

<properties>

      <file.encoding>UTF-8</file_encoding>

      <java.source.version>1.5</java_source_version>

      <java.target.version>1.5</java_target_version>

</properties>

使用方式如下 :

$file.encoding 还可以使用project.xx引用pom里定义的其它属性:如$(project.version 

Maven POM 文件:关于元素和部分排序的任何规则?

【中文标题】Maven POM 文件:关于元素和部分排序的任何规则?【英文标题】:Maven POM file: any rule on ordering of elements and sections? 【发布时间】:2016-10-17 16:00:32 【问题描述】:

关于pom.xml Maven 文件:

是否有任何特定规则适用于声明部分的排序? 它对构建有任何重要性或影响吗? 我应该遵守任何官方惯例吗?

【问题讨论】:

【参考方案1】:

尽管在大多数情况下,一个部分是否在另一个部分之前声明是无关紧要的,但在选择奇怪的布局(例如,最后的 Maven 坐标)时,可读性确实会受到影响。

但这不是最重要的一点,因为是的,某些元素的顺序会影响您的构建


plugin 声明的顺序

plugin 部分在 build/plugins 部分中的顺序可能很重要。从 Maven 3.0.3 (MNG-2258) 开始,附加到同一 Maven 阶段的不同插件执行将在 pom.xml 文件中按照它们的声明顺序 被调用,之后通过default bindings 附加的任何执行。也就是说,在这种情况下,排序很重要,因为它可能会影响构建的行为。


dependency 声明的顺序

此外,dependencies 部分中的dependency 声明的顺序也可能会影响您对Dependency Mediation 的构建,也就是说,在与传递依赖项发生冲突的情况下,第一个声明的依赖项获胜。因此,在某些情况下排序很重要

请注意,如果两个依赖版本在依赖树中的深度相同,则在 Maven 2.0.8 之前没有定义哪个会胜出,但从 Maven 2.0.9 开始,重要的是声明中的顺序:第一个声明获胜。

作为重击规则:首先声明您在代码中直接引用的依赖项(即,作为import 语句)。


module 声明的顺序

虽然在大多数情况下不相关,但因为之前应用了其他重要规则,Maven 还将在多模块构建期间尊重modules 部分中module 元素的声明顺序作为最后决定观点。 reactor mechanism 实际上会:

在对项目进行排序时遵循以下关系:

项目依赖于构建中的另一个模块 插件声明,其中插件是构建中的另一个模块 插件依赖于构建中的另一个模块 构建中另一个模块的构建扩展声明 元素中声明的顺序(如果没有其他规则适用)

注意:此处加粗。


标准布局

最后但并非最不重要的一点,虽然对于pom.xml文件的其他部分来说排序并不重要,但好习惯是遵循官方Maven recommendations:

团队在 2008 年 6 月末投票决定遵循特定的 POM 约定来订购 POM 元素。

作为简化版本,请遵循以下声明顺序:

<project>
  <modelVersion/>

  <parent/>

  <groupId/>
  <artifactId/>
  <version/>
  <packaging/>

  <properties/>

  <dependencyManagement/>
  <dependencies/>

  <build/>

  <reporting/>

  <profiles/>
</project>

最后一点,sortpom-maven-plugin 也可用于自动应用此标准排序,只需在相关的pom.xml 文件上调用以下内容:

mvn com.github.ekryd.sortpom:sortpom-maven-plugin:2.5.0:sort \
     -Dsort.keepBlankLines -Dsort.predefinedSortOrder=recommended_2008_06 

另外请注意,上面的异常没有被处理,但documented 由插件作为特殊情况下确实排序可能会影响您的构建。


进一步阅读

Official Maven doc: Plugin Bindings Official Maven doc: Dependency Mediation Official Maven doc: Maven Code Style And Code Conventions

【讨论】:

以上是关于关于pom文件的描述的主要内容,如果未能解决你的问题,请参考以下文章

关于 Maven 版本插件

关于pom.xml文件中配置jquery,以及如何在jsp中引入

关于maven环境下使用pom.xml引入包名.lastUpdate包的解决办法

关于使用命令添加jar进自己的pom文件中-maven项目添加jar包

关于Maven的一点理解

关于maven的几个问题