博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pom.xml文件元素解析
阅读量:2492 次
发布时间:2019-05-11

本文共 5436 字,大约阅读时间需要 18 分钟。

概念:pom.xml---Project Object Model,是一种项目对象模型,通过xml格式保存,在maven中的作用类似于ant的build.xml文件,但是功能更加强大。

作用:该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。

位置:Maven项目的根目录下

结构:一个完整的pom文件大概包括6个部分,如下所示,其中后面四个部分是主要的,分别是properties、dependencyManagement、dependencies、build等四个元素标签,下面对其一一解说。

先贴一个常规的pom.xml文件配置,可以跳过不看这个,主要看下面的基础解析部分。

 

4.0.0
com.my.mavenweb
testWeb
0.0.1-SNAPSHOT
war
testWebMaven Webapp
http://maven.apache.org
UTF-8
3.1.1.RELEASE
3.8.1
org.springframework
spring-framework-bom
${spring.version}
pom
import
org.springframework
spring-webmvc
junit
junit
3.8.1
test
commons-fileupload
commons-fileupload
1.3.1
testWebName
org.eclipse.jetty
jetty-maven-plugin
9.2.2.v20140723
package
run

 

pom基础元素解析

第一部分:根

      这是对Project添加一些根元素的约束信息

 <!-- 1-->

<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.apache.org/maven-v4_0_0.xsd">

 

第二部分:pom属性

这是对当前pom文件添加自己的属性,如下:

 <!-- 2-->

<!-- 制定了当前pom的版本,是必不可少的-->  

<modelVersion>4.0.0</modelVersion>   

<!-- 项目坐标(groupIdartifactIdversion):定义pom文件属于哪个maven项目

        maven项目是一种模块化的概念,里面将项目划分为模块。

        groupId=反写公司网址.项目名

        artifactId=项目名-模块名

        version=0.0.1SNAPSHOP

        (第一个0表示大本版号,第二个0表示分支版本号,第三个0表示小版本号)

        (版本除了snapshop快照版本之外,还有alpha--α内测版本、beta--β公测版本、Release稳定版本、GA发布版本)

      -->

  <groupId>com.my.mavenweb</groupId>

  <artifactId>testWeb</artifactId>

   <version>0.0.1-SNAPSHOT</version>

<!-- packaging:指定了项目的打包方式,如果内容为空,默认指定打包为Jar包,此外,还要warzippom等类型-->

<packaging>war</packaging>

<!-- name:指定了项目的描述名,一般在产生对象文档的时候才会使用 -->

    <name>testWebMaven Webapp</name>

 <!--URl:指定了项目的Url -->

     <url>http://maven.apache.org</url>

   

<!-- description:项目描述信息

     developers:开发人员信息

     licenses:开源框架的许可证信息

     organization:组织信息    

     -->

     <descriprion></descriprion>

     <developers></developers>

     <licenses></licenses>

     <organization></organization>

 

第三部分:properties

properties列表用于声明一些软件包的版本。当工程比较繁杂庞大的时候,则可以通过这个配置比较清晰的指导依赖包的版本,方便我们做一些气的处理。

如下所示:生命了源文件的编码格式为UTF-8,spring框架依赖包的版本为3.1.1.RELEASE,Junit的版本为3.8.1。

<!-- 3-->

   <properties> 

        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 

        <springversion>3.1.1.RELEASE</springversion> 

        <junitversion>3.8.1</junitversion> 

    </properties>

 

第四部分:dependencyManagement

dependencyManagement属性列表,用于依赖管理,声明使用指定版本的包,重在声明依赖,可以不引入实际的依赖项。

又叫做多模块依赖项版本控制:主要是针对父模块列出依赖项进行管理,使得下面需要某个父模块的模块直接继承该依赖,  不用进行传递依赖这么麻烦,但是该标签不会引入到执行当中,只起到一个说明作用。

 

第五部分:dependencies

dependencies属性表示在依赖列表当中加入项目中所要使用的依赖包,需要加入坐标,还可以加入其他的属性。

 <!--

 dependencies:依赖信息列表

 dependency:依赖项

 groupIdartifactIdversion:依赖项的位置坐标,方便查找依赖。

 type:依赖项的类型,jar/war/zip/pom等类型

 scope:依赖范围,是指当前依赖项在哪个范围内有效。

 potional:依赖是否可选,默认为false,则项目可以继承该依赖;如果为true,则子项目必须显式引入该依赖

 exclusions:排除依赖的传递列表

 exclusion:排除依赖,例如排除传递依赖中自己不需要的依赖项

 -->

<!-- 5-->

    <dependencies>     

              <dependency>

        <groupId>org.springframework</groupId>

        <artifactId>spring-webmvc</artifactId>

      </dependency>

      <dependency>

        <groupId>junit</groupId>

        <artifactId>junit</artifactId>

        <version>3.8.1</version>

        <scope>test</scope>

      </dependency>

      <dependency>

        <groupId>commons-fileupload</groupId>

         <artifactId>commons-fileupload</artifactId>

         <version>1.3.1</version>

      </dependency>

    </dependencies>

 

第六部分:build

build元素标签用于引入项目中需要用到的插件

  <!--

 build:系统项目构建行为知识

  plugins:引入的插件的列表

  plugin:插件,这个标签下需要声明插件的坐标,

 -->

  <!--

   parent:通常用于子模块对父模块POM的集成

  modules:用于聚合运行多个项目,指定多个模块一起编译。

  -->

<!-- 6-->

  <build>

    <finalName>testWebName</finalName>

<plugins>

        <plugin>

           <groupId>org.eclipse.jetty</groupId>

           <artifactId>jetty-maven-plugin</artifactId>

           <version>9.2.2.v20140723</version>

           <executions>

                 <execution>

                 <phase>package</phase>

                 <goals>

                  <goal>run</goal>

                 </goals>

              </execution>

           </executions>

        </plugin>

      </plugins>  

</build>

  <parent></parent>

  <modules></modules>

</project>

 

 

dependencyManagement和dependencies的区别

         1)      dependencies:自动引入声明在dependencies里的所有依赖,并默认被所有的子项目继承。如果项目中不写依赖项,则会从父项目继承(属性全部继承)声明在父项目dependencies里的依赖项。         

        2)      dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显式的声明需要的依赖。如果不在子项目中声明依赖,是不会从父项目中继承的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。同时dependencyManagement让子项目引用依赖,而不用显式的列出版本号。Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号,实现所有子项目使用的依赖项为同一版本。

       3)      dependencyManagement中的 dependencies 并不影响项目的依赖项;而独立dependencies元素则影响项目的依赖项。只有当外层的dependencies元素中没有指明版本信息时,dependencyManagement中的 dependencies 元素才起作用。一个是项目依赖,一个是maven项目多模块情况时作依赖管理控制的。

       4)      pluginManagement和plugins 区别相似,只不过它们用于管理plugin。

 

转载地址:http://tdlrb.baihongyu.com/

你可能感兴趣的文章
PHP 实现笛卡尔积
查看>>
Laravel中的$loop
查看>>
CentOS7 重置root密码
查看>>
Centos安装Python3
查看>>
PHP批量插入
查看>>
laravel连接sql server 2008
查看>>
Laravel 操作redis的各种数据类型
查看>>
Laravel框架学习笔记之任务调度(定时任务)
查看>>
laravel 定时任务秒级执行
查看>>
浅析 Laravel 官方文档推荐的 Nginx 配置
查看>>
Swagger在Laravel项目中的使用
查看>>
Laravel 的生命周期
查看>>
CentOS Docker 安装
查看>>
Nginx
查看>>
Navicat远程连接云主机数据库
查看>>
Nginx配置文件nginx.conf中文详解(总结)
查看>>
Mysql出现Table 'performance_schema.session_status' doesn't exist
查看>>
MySQL innert join、left join、right join等理解
查看>>
vivado模块封装ip/edf
查看>>
sdc时序约束
查看>>