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

xml 代码
  1. <project>
  2. <modelVersion>4.0.0modelVersion>
  3. <groupId>...groupId>
  4. <artifactId>...artifactId>
  5. <version>...version>
  6. <packaging>...packaging>
  7. <dependencies>...dependencies>
  8. <parent>...parent>
  9. <dependencyManagement>...dependencyManagement>
  10. <modules>...modules>
  11. <properties>...properties>
  12. <build>...build>
  13. <reporting>...reporting>
  14. <name>...name>
  15. <description>...description>
  16. <url>...url>
  17. <inceptionYear>...inceptionYear>
  18. <licenses>...licenses>
  19. <organization>...organization>
  20. <developers>...developers>
  21. <contributors>...contributors>
  22. <issueManagement>...issueManagement>
  23. <ciManagement>...ciManagement>
  24. <mailingLists>...mailingLists>
  25. <scm>...scm>
  26. <prerequisites>...prerequisites>
  27. <repositories>...repositories>
  28. <pluginRepositories>...pluginRepositories>
  29. <distributionManagement>...distributionManagement>
  30. <profiles>...profiles>
  31. project>

基本内容:
    POM包括了所有的项目信息。
maven 相关:
pom定义了最小的maven2元素,允许groupId,artifactId,version。所有需要的元素

  • groupId:项目或者组织的唯一标志,并且配置时生成的路径也是由此生成,如org.codehaus.mojo生成的相对路径为:/org/codehaus/mojo
  • artifactId: 项目的通用名称
  • version:项目的版本
  • packaging: 打包的机制,如pom, jar, maven-plugin, ejb, war, ear, rar, par
  • classifier: 分类

POM关系:
主要为依赖,继承,合成
  依赖关系:

xml 代码
  1. <dependencies>
  2. <dependency>
  3. <groupId>junitgroupId>
  4. <artifactId>junitartifactId>
  5. <version>4.0version>
  6. <type>jartype>
  7. <scope>testscope>
  8. <optional>trueoptional>
  9. dependency>
  10. ...
  11. dependencies>
  • groupId, artifactId, version:描述了依赖的项目唯一标志

可以通过以下方式进行安装:

  • 使用以下的命令安装:
  • mvn install:install-file –Dfile=non-maven-proj.jar –DgroupId=some.group –DartifactId=non-maven-proj –Dversion=1
  • 创建自己的库,并配置,使用deploy:deploy-file
  • 设置此依赖范围为system,定义一个系统路径。不提倡。
  • type:相应的依赖产品包形式,如jar,war
  • scope:用于限制相应的依赖范围,包括以下的几种变量:
  • compile :默认范围,用于编译
  • provided:类似于编译,但支持你期待jdk或者容器提供,类似于classpath
  • runtime:在执行时,需要使用
  • test:用于test任务时使用
  • system:需要外在提供相应得元素。通过systemPath来取得
  • systemPath: 仅用于范围为system。提供相应的路径
  • optional: 标注可选,当项目自身也是依赖时。用于连续依赖时使用

独占性    
   外在告诉maven你只包括指定的项目,不包括相关的依赖。此因素主要用于解决版本冲突问题

xml 代码
  1. <dependencies>
  2. <dependency>
  3. <groupId>org.apache.mavengroupId>
  4. <artifactId>maven-embedderartifactId>
  5. <version>2.0version>
  6. <exclusions>
  7. <exclusion>
  8. <groupId>org.apache.mavengroupId>
  9. <artifactId>maven-coreartifactId>
  10. exclusion>
  11. exclusions>
  12. dependency>

表示项目maven-embedder需要项目maven-core,但我们不想引用maven-core

继承关系
    另一个强大的变化,maven带来的是项目继承。主要的设置:
定义父项目

xml 代码
  1. <project>
  2. <modelVersion>4.0.0modelVersion>
  3. <groupId>org.codehaus.mojogroupId>
  4. <artifactId>my-parentartifactId>
  5. <version>2.0version>
  6. <packaging>pompackaging>
  7. project>

packaging 类型,需要pom用于parent和合成多个项目。我们需要增加相应的值给父pom,用于子项目继承。主要的元素如下:

  • 依赖型
  • 开发者和合作者
  • 插件列表
  • 报表列表
  • 插件执行使用相应的匹配ids
  • 插件配置
  • 子项目配置
xml 代码
  1. <project>
  2. <modelVersion>4.0.0modelVersion>
  3. <parent>
  4. <groupId>org.codehaus.mojogroupId>
  5. <artifactId>my-parentartifactId>
  6. <version>2.0version>
  7. <relativePath>../my-parentrelativePath>
  8. parent>
  9. <artifactId>my-projectartifactId>
  10. project>

relativePath可以不需要,但是用于指明parent的目录,用于快速查询。

dependencyManagement:
用于父项目配置共同的依赖关系,主要配置依赖包相同因素,如版本,scope。

合成(或者多个模块)
    一个项目有多个模块,也叫做多重模块,或者合成项目。
如下的定义:

xml 代码
  1. <project>
  2. <modelVersion>4.0.0modelVersion>
  3. <groupId>org.codehaus.mojogroupId>
  4. <artifactId>my-parentartifactId>
  5. <version>2.0version>
  6. <modules>
  7. <module>my-project1<module>
  8. <module>my-project2<module>
  9. modules>
  10. project>

build 设置
    主要用于编译设置,包括两个主要的元素,build和report
  build
    主要分为两部分,基本元素和扩展元素集合
注意:包括项目build和profile build

xml 代码
  1. <project>
  2. <build>...build>
  3. <profiles>
  4. <profile>
  5. <build>...build>
  6. profile>
  7. profiles>
  8. project>

基本元素

xml 代码
  1. <build>
  2. <defaultGoal>installdefaultGoal>
  3. <directory>${basedir}/targetdirectory>
  4. <finalName>${artifactId}-${version}finalName>
  5. <filters>
  6. <filter>filters/filter1.propertiesfilter>
  7. filters>
  8. ...
  9. build>
  • defaultGoal: 定义默认的目标或者阶段。如install
  • directory: 编译输出的目录
  • finalName: 生成最后的文件的样式
  • filter: 定义过滤,用于替换相应的属性文件,使用maven定义的属性。设置所有placehold的值

资源(resources)
    你项目中需要指定的资源。如spring配置文件,log4j.properties

xml 代码
  1. <project>
  2. <build>
  3. ...
  4. <resources>
  5. <resource>
  6. <targetPath>META-INF/plexustargetPath>
  7. <filtering>falsefiltering>
  8. <directory>${basedir}/src/main/plexusdirectory>
  9. <includes>
  10. <include>configuration.xmlinclude>
  11. includes>
  12. <excludes>
  13. <exclude>**/*.propertiesexclude>
  14. excludes>
  15. resource>
  16. resources>
  17. <testResources>
  18. ...
  19. testResources>
  20. ...
  21. build>
  22. project>
  • resources: resource的列表,用于包括所有的资源
  • targetPath: 指定目标路径,用于放置资源,用于build
  • filtering: 是否替换资源中的属性placehold
  • directory: 资源所在的位置
  • includes: 样式,包括那些资源
  • excludes: 排除的资源
  • testResources: 测试资源列表

插件
  在build时,执行的插件,比较有用的部分,如使用jdk 5.0编译等等

xml 代码
  1. <project>
  2. <build>
  3. ...
  4. <plugins>
  5. <plugin>
  6. <groupId>org.apache.maven.pluginsgroupId>
  7. <artifactId>maven-jar-pluginartifactId>
  8. <version>2.0version>
  9. <extensions>falseextensions>
  10. <inherited>trueinherited>
  11. <configuration>
  12. <classifier>testclassifier>
  13. configuration>
  14. <dependencies>...dependencies>
  15. <executions>...executions>
  16. plugin>
  17. plugins>
  18. build>
  19. project>
  • extensions: true or false,是否装载插件扩展。默认false
  • inherited: true or false,是否此插件配置将会应用于poms,那些继承于此的项目
  • configuration: 指定插件配置
  • dependencies: 插件需要依赖的包
  • executions: 用于配置execution目标,一个插件可以有多个目标。

如下:

xml 代码
  1. <plugin>
  2. <artifactId>maven-antrun-pluginartifactId>
  3. <executions>
  4. <execution>
  5. <id>echodirid>
  6. <goals>
  7. <goal>rungoal>
  8. goals>
  9. <phase>verifyphase>
  10. <inherited>falseinherited>
  11. <configuration>
  12. <tasks>
  13. <echo>Build Dir: ${project.build.directory}echo>
  14. tasks>
  15. configuration>
  16. execution>
  17. executions>
  18. plugin>

说明:

  • id:规定execution 的唯一标志
  • goals: 表示目标
  • phase: 表示阶段,目标将会在什么阶段执行
  • inherited: 和上面的元素一样,设置false maven将会拒绝执行继承给子插件
  • configuration: 表示此执行的配置属性

插件管理
    pluginManagement:插件管理以同样的方式包括插件元素,用于在特定的项目中配置。所有继承于此项目的子项目都能使用。主要定义插件的共同元素

扩展元素集合
主要包括以下的元素:
Directories
用于设置各种目录结构,如下:

xml 代码
  1. <build>
  2. <sourceDirectory>${basedir}/src/main/javasourceDirectory>
  3. <scriptSourceDirectory>${basedir}/src/main/scriptsscriptSourceDirectory>
  4. <testSourceDirectory>${basedir}/src/test/javatestSourceDirectory>
  5. <outputDirectory>${basedir}/target/classesoutputDirectory>
  6. <testOutputDirectory>${basedir}/target/test-classestestOutputDirectory>
  7. ...
  8. build>

Extensions

表示需要扩展的插件,必须包括进相应的build路径。

xml 代码
  1. <project>
  2. <build>
  3. ...
  4. <extensions>
  5. <extension>
  6. <groupId>org.apache.maven.wagongroupId>
  7. <artifactId>wagon-ftpartifactId>
  8. <version>1.0-alpha-3version>
  9. extension>
  10. extensions>
  11. ...
  12. build>
  13. project>

Reporting
    用于在site阶段输出报表。特定的maven 插件能输出相应的定制和配置报表。

xml 代码
  1. <reporting>
  2. <plugins>
  3. <plugin>
  4. <outputDirectory>${basedir}/target/siteoutputDirectory>
  5. <artifactId>maven-project-info-reports-pluginartifactId>
  6. <reportSets>
  7. <reportSet>reportSet>
  8. reportSets>
  9. plugin>
  10. plugins>
  11. reporting>

Report Sets
    用于配置不同的目标,应用于不同的报表

xml 代码
  1. <reporting>
  2. <plugins>
  3. <plugin>
  4. ...
  5. <reportSets>
  6. <reportSet>
  7. <id>sunlinkid>
  8. <reports>
  9. <report>javadocreport>
  10. reports>
  11. <inherited>trueinherited>
  12. <configuration>
  13. <links>
  14. <link>http://java.sun.com/j2se/1.5.0/docs/api/link>
  15. links>
  16. configuration>
  17. reportSet>
  18. reportSets>
  19. plugin>
  20. plugins>
  21. reporting>

转载于https://blog.csdn.net/uohzoaix/article/details/7035307,如侵删

转载于:https://www.cnblogs.com/lizhang4/p/9039329.html

【转载】Maven pom文件详解相关推荐

  1. Maven中pom文件详解

    在IDE中使用Maven IDE工具 MyEclipse 集成maven插件 Eclipse ​ Eclipse For Java EE IDEA 集成Maven插件 在IDE中 配置Maven 指定 ...

  2. java中pom文件详解

    目录 一.maven项目的目录结构 二.根元素和必要配置 三.父项目和parent元素 四.项目构建需要的信息 1.路径管理 2.资源管理 3.插件管理 4.构建扩展 5.其他配置 五.项目依赖相关信 ...

  3. maven(二)pom文件详解

    文章目录 1. 什么是pom 文件? 2. pom文件各常用属性含义 2.1 项目基本信息 2.2 build项目构建属性介绍 2.2.1 resources资源路径列表 2.2.2 plugins ...

  4. 【Maven】Maven POM配置详解

    就像web项目的核心是web.xml一样,Maven项目的核心是pom.xml,POM(project object model,项目对象模型)定义了项目的基本信息,用于描述项目如何构建,如何声明依赖 ...

  5. maven pom.xml详解

    什么是pom?     pom作为项目对象模型.通过xml表示maven项目,使用pom.xml来实现.主要描述了项目:包括配置文件:开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的 ...

  6. springboot中pom文件详解

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...

  7. Maven的pom.xml文件详解------The Basics

    转载自  Maven的pom.xml文件详解------The Basics Maven坐标 GroupId.artifactId和version构成了Maven的坐标(groupId和version ...

  8. Maven的pom.xml文件详解------Environment Settings

    转载自  Maven的pom.xml文件详解------Environment Settings Issue Management 使用的缺陷跟踪系统(Bugzilla,TestTrack,Clear ...

  9. Maven的pom.xml文件详解------Build Settings

    转载自  Maven的pom.xml文件详解------Build Settings 根据POM 4.0.0 XSD,build元素概念性的划分为两个部分:BaseBuild(包含poject bui ...

最新文章

  1. php扩展-ioncube组件的安装方法_Windows系统PHPStudy Web环境安装ionCube扩展软件
  2. 人生苦短,请好好珍惜自已的身体
  3. 【iOS atomic、nonatomic、assign、copy、retain、weak、strong】的定义和区别详解
  4. Java Semaphore 信号量
  5. SAP Spartacus CmsPage的加载逻辑
  6. 机器学习笔记(五)——朴素贝叶斯分类
  7. 通过jquer连接数据库里面的数据、LINQ简介
  8. 前端项目,将package.json数据放到项目某处使用
  9. 剑指Offer之和为S的连续正数序列
  10. 【读书】《当我跑步时,我谈些什么》书评:我跑步时,只是跑着
  11. linux的wifi探针源码,运用在公共安全领域的WiFi探针
  12. 初学Linux服务器管理
  13. mv单位是什么意思_ayawawa经常说的pu MV是什么意思 怎么mv是什么意思算
  14. 和平精英服务器响应超时什么意思,和平精英服务器无响应,和平精英服务器超时...
  15. 地铁怎么坐才不能做反_[第一次]第一次一个人坐地铁,我坐反了方向
  16. 什么样的自学Java网站才适合学习者?
  17. Camera两种快门方式区别
  18. html如何实现小语种翻译,如何使用“小语种自动翻译”功能?
  19. 2019年5月1日起安卓应用应基于API 26开发
  20. 设置 Linux 支持中文

热门文章

  1. BZOJ.3261.最大异或和(可持久化Trie)
  2. 二十四、通过用户模型,对数据库进行增删改查操作
  3. django-celery beat报错 error pid
  4. Redo丢失的4种情况及处理方法
  5. Java语言基础-反射机制、正则表达式
  6. HTML知识积累及实践(四) - 表单元素
  7. tensorflow随笔——图像分类、检测,语义分割综述
  8. Git基础教程(一)
  9. c语言编程变色,【图片】(原创)用纯C变了个变色输出字符的程序。。。【c语言吧】_百度贴吧...
  10. php反向解析域名,域名系统 – Cloudflare,反向DNS和php邮件,最终在垃圾邮件文件夹中...