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. Docker数据卷

    1.volume操作命名:docker volume Usage:    docker volume COMMAND Manage Docker volumes Options:       --he ...

  2. day21:包和异常处理

    1,复习 # 序列化模块 # json # dumps # loads # dump 和文件有关 # load load不能load多次 # pickle # 方法和json的一样 # dump和lo ...

  3. Python3下载图片的方法

    1 第一种 from urllib import request request.urlretrieve(s, './图片1.jpg') # 第一种 # s是图片的网络地址,./图片1.jpg,是图片 ...

  4. jupyter notebook安装/代码补全/支持golang 踩坑记

    安装(不要用root) 安装anaconda3,然后ln -s bin目录下的jupyter命令到/usr/bin目录下 生成密码备用 敲ipython进入交互终端 In [1]: from note ...

  5. Object.keys()的理解

    Object.keys(obj) 方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用 for...in 循环遍历该对象时返回的顺序一致. 例子如下: ①.简单的数组( ...

  6. java框架之Spring(4)-Spring整合Hibernate和Struts2

    准备 导包 Struts2 导入 Struts2 zip 包解压目录下 'apps/struts-blank.war' 中所有 jar 包,如下: asm-3.3.jar asm-commons-3. ...

  7. Spark MLlib之使用Breeze操作矩阵向量

    在使用Breeze 库时,需要导入相关包: import breeze.linalg._ import breeze.numerics._ Breeze创建函数 //全0矩阵 DenseMatrix. ...

  8. PowerBI新功能: 自定义数据连接器(Data Connector)

    你是不是觉得原有的数据连接器(Data Connector)列表,就像女人的衣柜,总少那么一件你想要的呐? 现在,你的救星来了!你可以自己造一个了! Power BI的数据连接器(Data Conne ...

  9. Deeplab v3+的结构的理解,图像分割最新成果

    Deeplab v3+ 结构的精髓: 1.继续使用ASPP结构, SPP 利用对多种比例(rates)和多种有效感受野的不同分辨率特征处理,来挖掘多尺度的上下文内容信息. 解编码结构逐步重构空间信息来 ...

  10. meterpreter 渗透用法

    获取凭证 hashdump模块(post)可以从SAM数据库中导出本地用户账号,credential_collector脚本(post/windows/gather/credentials)也可以从目 ...