Maven-pom.xml

POM:Poject Object Model,项目对象模型。

项目基础信息:

modelVersion:

  当前POM模型的版本。

groupId:

  当前Maven项目隶属的实际项目。

artifactId:

  当前Maven项目的实际项目名称。推荐使用项目名-模块名的方式。

version:

  项目当前的版本。

packaging:

  项目的打包方式。默认为jar。

classifier:

  定义构建输出的一些附属构件。如源码、javadoc等。不能直接定义项目的classifier,因为附属构件不是项目直接默认生成的,而是由附加的插件帮助生成。

  artifactId-version [-classifier].packaging

name:

  声明了一个对于用户更友好的项目名称。

属性配置:

  properties:

  • 内容属性

  ${basedir}:项目根目录。

  ${version}:项目版本。

  • POM属性

  ${project.artifactId}:对应<project><artifactId>元素的值。

  ${project.build.sourceDirectory}:项目的主源码目录,默认为src/main/java/。

  ${project.build.testSourceDirectory}:项目的测试源码目录,默认为src/test/java/。

  ${project.build.directory}:项目构建输出目录,默认为target/。

  ${project.outputDirectory}:项目主代码编译输出目录,默认为target/classes/。

  ${project.testOutputDirectory}:项目测试代码编译输出目录,默认为target/test-classes/。

  ${project.groupId}:项目的groupId。

  ${project.artifactId}:项目的artifactId。

  • 自定义属性

  properties:

    property name:

  • Settings属性

  用户使用以settings.开头的属性引用settings.xml文件中XML元素的值。

  • Java系统属性
  • 环境变量属性

  用户使用以env.开头的属性引用环境变量。

依赖管理:

dependencies:依赖信息。

  dependency:单一依赖信息。

    groupId:依赖的组ID。

    artifactId:依赖的组唯一标识。

    version:依赖的版本。

    type:依赖的类型,对应于项目坐标定义的packaging。

    scope:依赖范围。

    optional:标记依赖是否可选。

    exclusions:排除传递性依赖。

      exclusion:排除传递性依赖。

        groupId:

        artifactId:

依赖范围:

  用于控制依赖与classpath(编译classpath、测试classpath、运行classpath)之间的关系。

  • compile:编译依赖范围,为默认依赖范围。范围为compile的依赖,对于编译、测试、运行三种classpath都有效。
  • test:测试依赖范围。范围为test的依赖,只对于测试classpath有效,在编译主代码或者运行项目的使用时将无法使用此类依赖。
  • provided:已提供依赖范围。范围为provided的依赖,对于编译和测试classpath有效,但在运行时无效。
  • runtime:运行时依赖。范围为runtime的依赖,对于测试和运行classpath有效,但在编译主代码时无效。
  • system:系统依赖范围。依赖范围与provided一致。使用system范围的依赖时必须通过systemPath元素显式地指定依赖文件的路径。systemPath元素可以引用环境变量。
  • import:导入依赖范围。该依赖范围不会对三种classpath产生实际的影响。只在dependencyManagement元素下有效。
依赖范围(scope) 对于编译classpath有效 对于测试classpath有效 对于运行classpath有效 例子
compile Y Y Y spring-core
test - Y - JUnit
provided Y Y - servlet-api
runtime - Y Y JDBC驱动
system Y Y - Maven仓库之外的类库

传递性依赖:

  account-email->spring-core->commons-logging

  Maven会解析各个直接依赖的POM,将必要的间接依赖以传递性依赖的形式引入到当前的项目中。

  compile test provided runtime
compile compile - - runtime
test test - - test
provided provided - provided provided
runtime runtime - - runtime

  当第二直接依赖的范围是compile的时候,传递性依赖的范围与第一直接依赖的范围一致;当第二直接依赖的范围是test的时候,依赖不会得以传递;当第二直接依赖的范围是provided的时候,只传递第一直接依赖范围也为provided的依赖,且传递性依赖的范围同样是provided;当第二直接依赖的范围是runtime的时候,传递性依赖的范围与第一直接依赖的范围一致,但compile例外,此时传递性依赖的范围为润time。

依赖调解:

  • 路径最近者优先。
  • 第一声明者优先。

可选依赖:

  项目的传递依赖中,可选依赖不会对项目产生任何影响。在理想的情况下,是不应该使用可选依赖的。

排除依赖:

  显式的排除传递性依赖,而后手动指定依赖。Maven解析后的依赖中,不可能出现groupId和artifactId相同但是version不同的两个依赖。

归类依赖:

  使用properties定义属性,而后使用${}进行引用。

依赖解析机制:

  1. 当依赖的范围是system的时候,直接从本地文件系统解析构件。
  2. 根据依赖坐标计算仓库路径后,尝试直接从本地仓库寻找构件,如果发现相应构件,则解析成功。
  3. 在本地仓库不存在相应构件的情况下,如果依赖的版本是显式的发布版本构件,则遍历所有的远程仓库,发现后,下载并解析使用。
  4. 如果依赖的版本是RELEASE或者LATEST,则基于更新策略读取所有远程仓库的元数据groupId/artifactId/maven-metadata.xml,将其与本地仓库的对应元数据合并后,计算出RELEASE或者LATEST真实的值,然后基于这个真实的值检查本地和远程仓库,如步骤2和3。
  5. 如果依赖的版本是SNAPSHOT,则基于更新策略读取所有远程仓库的元数据groupId/artifactId/maven-metadata.xml,将其与本地仓库的对应元数据合并后,得到最新快照版本的值,然后基于该值检查本地仓库,或者从远程仓库下载。
  6. 如果最后解析得到的构建版本是时间戳格式的快照,则复制其时间戳格式的文件至非时间戳格式,并使用该非时间戳格式的构件。

  RELEASE:最新发布版本,不包括快照版本。

  LATEST:最新版本,包括快照版本。

聚合:

  将多个Maven项目或模块组合成一个项目,以便进行统一的构建。

<packaging>pom</packaging>

<modules>

  <module>{相对于当前POM的目录}</module>

</modules>

继承:

  消除重复配置。

<parent>

  <groupId></groupId>

  <artifactId></artifactId>

  <version></version>

  <relativePath>{默认值为../pom.xml}</relativePath>

</parent>

可继承的元素:

  • groupId
  • version
  • description
  • organization
  • inceptionYear:项目的创始年份。
  • url:项目的URL地址。
  • developers:项目的开发者信息。
  • contributors:项目的贡献者信息。
  • disstibutionManagement:项目的部署配置。
  • issueManagement:项目的缺陷跟踪系统信息。
  • ciManagement:项目的持续集成系统信息。
  • scm:项目的版本控制系统信息。
  • mailingLists:项目的邮件列表信息。
  • properties:自定义的Maven属性。
  • dependencies:项目的依赖配置。
  • dependencyManagement:项目的依赖管理配置。
  • repositories:项目的仓库配置。
  • build:包括项目的源码目录配置、输出目录配置、插件配置、插件管理配置等。
  • reporting:包括项目的报告输出目录配置、报告插件配置等。

依赖管理:

  让子模块继承到父模块的依赖配置,同时保证子模块依赖使用的灵活性。

反应堆:

  所有模块组成的一个构建结构。

properties:

  propertyName:

  project.build.sourceEncoding:指定读取源码及文档的编码。

  project.reporting.outputEncoding:指定呈现站点的html文档的编码。

远程仓库配置:

repositories:

  repository:

    id:

    name:

    url:

    releases:

      enabled:

      updatePolicy:配置从远程仓库检查更新的频率。

        never:从不检查更新。

        always:每次构建都检查更新。

        interval:每隔X分钟检查一次更新。

        daily:每天检查一次更新。

      checksumPolicy:配置Maven检查检验和文件的策略。

        warn:在执行构建时输出警告信息。

        fail:在执行构建时失败。

        ignore:完全忽略校验和错误。

    snapshots:

      enabled:

    layout:

插件管理:

pluginManagement:

  plugins:

    plugin:

      groupId:

      artifactId:

      executions:

        execution:

          id:

          phase:

          goals:

插件仓库配置:

pluginRepositories:

  pluginRepository:

  id:

  name:

  url:

  layout:

  snapshots:

    enabled:

  releases:

    enabled:

项目构建: 

build:

  plugins:

    plugin:

      groupId:

      artifactId:

      configuration:

    executions:

      execution:执行任务。

        id:

        phase:绑定的生命周期。

        goals:指定插件目标。

          goal:

资源过滤:

  resources:

    resource:

      directory:

      filtering:

  testResources:

    testResource:

      directory:

      filtering:

  profiles:

    profile:

      id:

      properties:

      activation:

        property:在某个系统属性存在时自动激活profile。

          name:

        os:操作系统环境激活。

          name:

          family:

          arch:

          version:

        file:文件存在与否激活。

          missing:

          exists:

        activeByDefault:默认激活。

  -P:在命令行激活一个profile。

项目发布:

distributionManagement:

  repository:发布版本仓库。

    id:

    name:

    url:

  snapshotRepository:快照版本仓库。

    id:

    name:

    url:

项目信息:

scm:

  connection:

  developerConnection:

  url:

ciManagement:

  system:

  url:

developers:

  developer:

    id:

    name:

    email:

    timezone:

issueManagement:

  system:

  url:

licenses:

  license:

    name:

    url:

快照版本:

  在发布快照版本时,Maven为其打上时间戳。在项目依赖时,如果依赖的版本为快照版本,则按照更新规则更新快照版本。

  快照版本只应该在组织内部的项目或模块间依赖使用。项目不应该依赖于任何组织外部的快照版本依赖。

Maven约定:

  • 源码目录未src/main/java/
  • 编译输出目录未target/classes/
  • 打包方式为jar
  • 包输出目录未target/
时间: 2024-08-08 11:28:53

Maven-pom.xml的相关文章

Maven pom.xml 配置详解

什么是pom?    pom作为项目对象模型.通过xml表示maven项目,使用pom.xml来实现.主要描述了项目:包括配置文件:开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url,项目的依赖性,以及其他所有的项目相关因素. pom.xml 配置文件 <project> <parent> ... </parent> <modelVersion>4.0.0</modelVersion> <!-- The Basics

学习笔记——Maven pom.xml配置详解

POM的全称是“ProjectObjectModel(项目对象模型)”. pom.xml详解 声明规范 <projectxmlns="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.apach

Maven pom.xml文件详解

Maven pom.xml文件详解 一.简介 POM全称是Project Object Model,即项目对象模型. pom.xml是maven的项目描述文件,它类似与antx的project.xml文件. pom.xml文件以xml的 形式描述项目的信息,包括项目名称.版本.项目id.项目的依赖关系.编译环境.持续集成.项目团队.贡献管理.生成报表等等.总之,它包含了所有的项目 信息. <project xmlns="http://maven.apache.org/POM/4.0.0&q

Maven pom.xml 全配置(一)常用配置

Maven pom.xml 全配置(一)常用配置 这里贴出一个Maven中出现频率较高的配置参数注释,方便理解项目中Maven的配置具体的作用.如果在此博文中没有找到你想看到的参数,可以移步Maven pom.xml 全配置(二)不常用配置 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:sc

Maven pom.xml 全配置(二)不常用配置

Maven pom.xml 全配置(二)不常用配置 这里贴出Maven pom.xml文件中使用率较少的配置参数,如果此篇文档中没有找到你想要的参数,移步Maven pom.xml 全配置(一)常用配置 <!-- 项目创建年份,4位数字.当产生版权信息时需要使用这个值. --> <inceptionYear /> <!-- 描述了这个项目构建环境中的前提条件. --> <prerequisites> <!-- 构建该项目或使用该插件所需要的Maven的

Maven - pom.xml 文件

章节 Maven – 简介 Maven – 工作原理 Maven – Repository(存储库) Maven – pom.xml 文件 Maven – 依赖管理 Maven – 构建生命周期.阶段.目标 Maven – profile Maven – 插件 Maven – web 实例 Maven – Eclipse例子 POM是Project Object Model/项目对象模型的缩写.pom.xml文件中包含了依赖关系.构建目录.源目录.测试源目录.插件.目标等项目信息和配置信息.Ma

史上最全的maven pom.xml文件教程详解

<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 >; <!-- 父项目的坐标.如果项目中没有规定某个元素的值,那么父项目中的对应值即为项目的默认值.

Maven pom.xml中的元素modules、parent、properties以及import

前言 项目中用到了maven,而且用到的内容不像利用maven/eclipse搭建ssm(spring+spring mvc+mybatis)用的那么简单:maven的核心是pom.xml,那么我就它来谈谈那些不同的地方: 给我印象最深的就是如下四个元素:modules.parent.properties.import. modules 从字面意思来说,module就是模块,而pom.xml中的modules也正是这个意思,用来管理同个项目中的各个模块:如果maven用的比较简单,或者说项目的模

运行maven pom.xml文件后编译环境变为jdk1.5

idea中运行pom.xml文件后,将编译环境变成了1.5,造成一系列的编译问题很是不方便. 以下是解决方法: 在"pom.xml"里加入如下代码: <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> 然后按&q

Maven pom.xml文件详细教程

--------------------------------------------------------------- <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