1.1           Maven的pom配置文件

1.1.1            pom文件内容和作用

Pom.xml文件用来设置项目的项目依赖、插件、项目版本等信息,其中必须的是xml的根元素project 元素和三个必需字段:工程组的标识groupId,工程的名称artifactId,版本信息version三个元素。

举例:

<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/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>project</artifactId>

<!-- 版本号 -->

<version>1.0</version>

</project>

1.1.2            超级Pom文件的继承关系

超级pom是项目的默认配置文件,项目中所有子模块的pom文件都会继承超级pom文件,在项目文件夹打开命令控制台,进入包含 pom.xml 文件夹,执行命令mvn help:effective-pom,maven会自动扫描工程,生成超级pom文件。

超级pom文件的内容

基础信息设置

包括pom三要素:<groupId>    <artifactId>  <version>,依赖关系。

构建信息

用来配置源代码路径、输出路径、资源路径,依赖插件信息

更多项目信息

环境设置

<project>
  <modelVersion>4.0.0</modelVersion>
<!--maven2.0必须是这样写,现在是maven2唯一支持的版本-->
  <!-- 基础设置 -->
  <groupId>...</groupId>项目唯一标识
  <artifactId>...</artifactId>项目名称
  <version>...</version>项目版本
  <packaging>...</packaging>打包机制,打包机制,如pom,jar,war,ear,rar,par

<name>...</name>描述项目的名称

<url>...</url>开发团队的网址
  <dependencies>...</dependencies>依赖关系
  <parent>...</parent>
  <dependencyManagement>...</dependencyManagement>
  <modules>...</modules>
  <properties>...</properties>

  <!--构建设置 -->
 <build>

<sourceDirectory>C:\MVN\project\src\main\java</sourceDirectory>

<scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>

<testSourceDirectory>C:\MVN\project\src\test\java</testSourceDirectory>

<outputDirectory>C:\MVN\project\target\classes</outputDirectory>

<testOutputDirectory>C:\MVN\project\target\test-classes</testOutputDirectory>

<resources>

<resource>

<mergeId>resource-0</mergeId>

<directory>C:\MVN\project\src\main\resources</directory>

</resource>

</resources>

<testResources>

<testResource>

<mergeId>resource-1</mergeId>

<directory>C:\MVN\project\src\test\resources</directory>

</testResource>

</testResources>

<directory>C:\MVN\project\target</directory>

<finalName>project-1.0</finalName>

<pluginManagement>

<plugins>

<plugin>

<artifactId>maven-antrun-plugin</artifactId>

<version>1.3</version>

</plugin>

<plugin>

<artifactId>maven-assembly-plugin</artifactId>

<version>2.2-beta-2</version>

</plugin>

</plugins>

</build>

  <!-- 更多项目信息 -->
  <name>...</name>
  <description>...</description>
  <url>...</url>
  <inceptionYear>...</inceptionYear>
  <licenses>...</licenses>
  <organization>...</organization>
  <developers>...</developers>
  <contributors>...</contributors>

<!-- 环境设置-->
  <issueManagement>...</issueManagement>
  <ciManagement>...</ciManagement>
  <mailingLists>...</mailingLists> 
  <scm>...</scm>
  <prerequisites>...</prerequisites>
  <repositories>...</repositories>
  <pluginRepositories>...</pluginRepositories>
  <distributionManagement>...</distributionManagement>
  <profiles>...</profiles>
</project>

1.1.3            Pom文件中的依赖dependencies

Dependencies字段用来声明项目依赖的其他项目和组件,有三要素唯一标识其他项目和组件。需要是maven中心包管理的项目或组件,否则需要自己部署,或者通过设置scope为system并指定路径,将依赖项目包含进来。有时候各个项目多层依赖,如A依赖B,B依赖C,如果在A中依赖B,默认A依赖C,如果A不想依赖C,可以用exclusions将C排除.

<dependencies>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.0</version>

<type>jar</type>//依赖项目类型

<scope>test</scope>依赖范围(作用时间和作用域):test、system等

<optional>true</optional>false,子项目默认集成,true,子项目需要显示引入

</dependency>

<dependency>

<groupId>com.alibaba.china.shared</groupId>

<artifactId>alibaba.apollo.webx</artifactId>

<version>2.5.0</version>

<exclusions>

<exclusion>从依赖的com.alibaba.china.shared排除下面的子项目

<artifactId>org.slf4j.slf4j-api</artifactId>

<groupId>com.alibaba.external</groupId>

</exclusion>

....

</exclusions>

......

</dependencies>

dependencyManagement:是用于帮助管理chidren的dependencies的。例如如果parent使用dependencyManagement定义了一个dependencyon junit:junit4.0,那么 它的children就可以只引用 groupId和artifactId,而version就可以通过parent来设置,这样的好处就是可以集中管理依赖的详情。

Ø  scope:表示依赖项目的一个作用范围。scope的主要取值范围如下(还有一个是在Maven2.0.9以后版本才支持的import,关于import作用域将在后文《Dependency介绍》中做介绍):

compile:这是它的默认值,这种类型很容易让人产生误解,以为只有在编译的时候才是需要的,其实这种类型表示所有的情况都是有用的,包括编译和运行时。而且这种类型的依赖性是可以传递的。

provided:这个跟compile很类似,但是它表示你期望这个依赖项目在运行时由JDK或者容器来提供。这种类型表示该依赖只有在测试和编译的情况下才有效,在运行时将由JDK或者容器提供。这种类型的依赖性是不可传递的。

runtime:这种类型表示该依赖在编译的时候不是必须的,只有在运行的时候才是必须的。

test:这表示这种依赖只有测试的时候才需要,正常情况下是不需要的。

system:这种类型跟provided类似,唯一不同的就是这种类型的依赖我们要自己提供jar包,这需要与另一个元素systemPath来结合使用。systemPath将指向我们系统上的jar包的路径,而且必须是给定的绝对路径。

systemPath:上面已经说过了这个元素是在scope的值为system的时候用于指定依赖的jar包在系统上的位置的,而且是绝对路径。该元素必须在依赖的 jar包的scope为system时才能使用,否则Maven将报错。

1.1.4            Pom文件中的继承

父项目和子项目之间可以是继承关系,子项目pom文件中通过parent节点指定继承的父项目的三要素,不在同一路径下时还要用<relativePath>节点去指定相对路径。,子pom.xml会完全继承父pom.xml中所有的元素,而且对于相同的元素,一般子pom.xml中的会覆盖父pom.xml中的元素,但是有几个特殊的元素它们会进行合并而不是覆盖。这些特殊的元素是:dependencies、developers、contributors、plugin列表,包括plugin下面的reports、resources。

带有相对路径的子项目pom文件示例:

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

<parent>

<groupId>com.tiantian.mavenTest</groupId>

<artifactId>projectA</artifactId>

<version>1.0-SNAPSHOT</version>

<relativePath>../projectA/pom.xml</relativePath>

</parent>

<modelVersion>4.0.0</modelVersion>

<groupId>com.tiantian.mavenTest</groupId>

<artifactId>projectB</artifactId>

<packaging>jar</packaging>

<version>1.0-SNAPSHOT</version>

</project>

1.1.5            Pom文件的聚合module

聚合和继承是相关的两个概念,项目A,B,C,A作为父项目,B和C作为A的子模块,继承A的pom文件。而在A的pom文件中在<modules>标识中,添加B和C,在B和C的pom文件中声明parent为A,并将A的pom.xml中的packaging元素的值为pom。当对项目A进行编译时,B,C也会同时被编译。当我们在项目A上使用Maven命令时,实际上这些命令都会在它的子模块项目B,C上使用。这样方便大型项目的统一管理。Module中填的是子项目中pom的位置相对于父项目pom文件的相对路径,就是从父项目pom所在的目录出发,进入子项目pom文件所在的文件的相对路径。

<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/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>com.tiantian.mavenTest</groupId>

<artifactId>A</artifactId>

<version>1.0-SNAPSHOT</version>

<packaging>pom</packaging>

<modules>

<module>/B</module> //B在A文件夹下面和A的pom一级,在B文件夹下可以找到B的pom

<module>../C</module> //A和C为同级目录,所以..退出A,然后在进入C,可以找到C的pom文件。

</modules>

</project>

1.1.6            Pom属性

在pom.xml文件中我们可以使用${propertyName}的形式引用属性。这个propertyName有以下几种形式:

(1)env.propertyName:这种形式表示引用的是环境变量,比如我们需要引用当前系统的环境变量PATH的时候,就可以使用${env.PATH}。

(2)project.propertyName:这种形式表示引用的是当前这个pom.xml中project根元素下面的子元素的值。比如我们需要引用当前project下面的version的时候,就可以使用${project.version}。

(3)settings.propertyName:这种形式引用的是Maven本地配置文件settings.xml或本地Maven安装目录下的settings.xml文件根元素settings下的元素。比如我们需要引用settings下的本地仓库localRepository元素的值时,我们可以用${settings.localRepository}

(4)java的系统属性,所有在java中使用java.lang.System.getProperties()能够获取到的属性都可以在pom.xml中引用,比如${java.home}。

(5)pom.xml中properties元素下面的子元素作为属性。假如在pom.xml中有如下一段代码<properties><hello.world>helloWorld</hello.world></properties>,那么我们就可以使用${hello.world}引用到对应的helloWorld。

Maven的pom配置文件的更多相关文章

  1. Maven打包pom里面配置exclude 排除掉环境相关的配置文件

    Maven打包pom里面配置exclude 排除掉环境相关的配置文件 有几种方式:1. 打包时,指定环境参数把环境的配置文件复制过去2. 不打包所有的环境相关的配置文件,直接由运维的人维护 可以在上传 ...

  2. Maven的pom.xml配置文件详解

    Maven简述 Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具. Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具.由于 Mav ...

  3. Maven之pom.xml配置文件详解

    此文非原创,摘自:https://www.baidu.com/link?url=GlGgW21nijIiULDZj0RfPH8ofqGMqEnAzXiym7O3hfrZM5nFH2enukemBNTX ...

  4. maven中的pom配置文件标签的详细介绍

    <span style="padding:0px; margin:0px"><project xmlns="http://maven.apache.or ...

  5. maven的pom.xml配置文件讲解

    <project xmlns="http://maven.apache.org/POM/4.0.0 "     xmlns:xsi="http://www.w3.o ...

  6. Maven的POM.xml配置大全

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

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

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  8. Maven的pom.xml 配置详解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  9. Maven项目pom.xml文件详解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

随机推荐

  1. 学习 yjango 博士的学习方法后的总结

    博士的初期内容主要是机器学习, 基于机器学习的理论来总结人类自身的学习过程和方式, 现总结博士视频中提到的主要方式 -.  学习的原则 例子重塑大脑 明确输入输出 用二阶知识拆分知识 二. 什么是学习 ...

  2. 解决HTML5提出的新的元素不被IE6-8识别的解决办法

    解决HTML5提出的新的元素不被IE6-8识别的解决办法 <!--[if lt IE 9]> <script type="text/javascript" src ...

  3. git:当本地分支中的代码和develop分支上有很多冲突,希望删掉本地分支,重新建立新的分支,怎么解决?

    git:当本地分支中的代码和develop分支上有很多冲突,希望删掉本地分支,重新建立新的分支,但是git中说你需要先解决当前的冲突,这种情况怎么解决 这种情况可以在代码编辑器中点击commit,然后 ...

  4. 《Java程序设计》第二周学习记录(2)

    目录 3.1 运算符与表达式 3.3 if条件分支语句 3.7 for语句与数组 参考资料 3.1 运算符与表达式 和C语言基本上没有区别,要注意的是关系运算符的输出结果是bool型变量 特别要注意算 ...

  5. PowerDesigner导出pdm设计为Word文档

    点击Report->Reports 点击New Report 选择Standard Physical Report,语言选择简体中文,如下图 此时目录下就会多一个Report 右窗口: 根据自己 ...

  6. 斐讯面试记录—TCP滑动窗口及拥塞控制

    TCP协议作为一个可靠的面向流的传输协议,其可靠性是由流量控制和滑动窗口协议保证,而拥塞控制则由控制窗口结合一系列的控制算法实现. 一.滑动窗口协议 1. “窗口”对应的是一段可以被发送者发送的字节序 ...

  7. day09 python之函数进阶

    楔子 假如有一个函数,实现返回两个数中的较大值: def my_max(x,y): m = x if x>y else y return mbigger = my_max(10,20)print ...

  8. DoubleDQN---tensorflow实现

    完整代码:https://github.com/zle1992/Reinforcement_Learning_Game 开山之作: <Playing Atari with Deep Reinfo ...

  9. 艾妮记账本Web开发(开发版)

    因为没有办法制作微信小程序版的艾妮记账本所以只能选择做Web开发版,但因为是花时间赶出来到的(但用了我已学的所有Web知识)所以就没有办法按老师的要求写七天的制作过程. 其实真正说起来我的这个Web开 ...

  10. Java 实现异步调用

    首先 我遇到的问题是 接口调用时需要更新缓存 而更新缓存又是个说快不快的过程 所以打算做异步调用 返回我所需要的结果即可 ,至于缓存什么时候更新完 就不是我所需要关注的了 废话不多说 上代码 publ ...