Maven pom.xml文件详解

时间:2022-03-06 09:57:46

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" 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.lin.learning</groupId>
<artifactId>maven-hellowrold</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>maven-hellowrold</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>

modelVersion 描述这个POM文件是遵从哪个版本的项目描述符。
groupId 针对一个项目的普遍唯一识别符。通常用一个完全正确的包的名字来与其他项目的类似名字来进行区分(比如:org.apache.maven)。
artifactId 在给定groupID 的group里面为artifact 指定的标识符是唯一的 , artifact 代表的是被制作或者被一个project应用的组件(产出物)。
version 当前项目产生的artifact的版本以上4个元素缺一不可,其中groupId, artifactId, version描述依赖的项目唯一标志。

二、pom.xml文件结构

<project>
<modelVersion>4.0.0</modelVersion>
<!- The Basics 项目的基本信息->
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<packaging>...</packaging>
<dependencies>...</dependencies>
<parent>...</parent>
<dependencyManagement>...</dependencyManagement>
<modules>...</modules>
<properties>...</properties>
<!- Build Settings 项目的编译设置->
<build>...</build>
<reporting>...</reporting>
<!- More Project Information 其它项目信息 ->
<name>...</name>
<description>...</description>
<url>...</url>
<inceptionYear>...</inceptionYear>
<licenses>...</licenses>
<organization>...</organization>
<developers>...</developers>
<contributors>...</contributors>
<!-- Environment Settings ->
<issueManagement>...</issueManagement>
<ciManagement>...</ciManagement>
<mailingLists>...</mailingLists>
<scm>...</scm>
<prerequisites>...</prerequisites>
<repositories>...</repositories>
<pluginRepositories>...</pluginRepositories>
<distributionManagement>...</distributionManagement>
<profiles>...</profiles>
</project>

project是pom.xml的根节点,至于其它元素请参考POM Reference

三、三个重要关系

POM有3个很重要的关系:依赖、继承、合成。

1,依赖关系

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.0</version>
<type>jar</type>
<scope>test</scope>
<optional>true</optional>
</dependency>
...
</dependencies>

如果想依赖一个maven库中没有的一个jar包,方法很简单,就是先将此jar包使用以下的命令安装到本地maven库中:
mvn install:install-file -Dfile=my.jar -DgroupId=mygroup -DartifactId=myartifactId -Dversion=1
再把依赖关系加进去即可。

2,继承关系

maven带来的是项目继承。

(1)定义父项目

<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.mygroup </groupId>
<artifactId>my-parent</artifactId>
<version>2.0</version>
<packaging>pom</packaging>
</project>

packaging 类型,定义值为 pom用于定义为parent和合成多个项目。 当然我们创建的maven项目的pom都继承maven的super pom, 如果想看项目(父或子)的完全的pom结构,可以运行:
mvn help:effective-pom

四、maven-eclipse-plugin插件

1,mvn eclipse:eclipse

说明: 生成eclipse配置文件,导入到eclipse开放,如果是使用m2eclipse插件,则可以不用次命令.直接使用插件导入到eclipse进行开放

注:通过次命令生产的项目,需要在eclipse中配置M2_HOME的命令,指向你的本地仓库文件夹.

Maven pom.xml文件详解

来看看生成的结果:.classpath就是字节码

Maven pom.xml文件详解

2,mvn eclipse:m2eclipse

生成eclipse配置文件,该配置文件需依赖eclipse 中有m2eclipse 
-DdownloadSources=true 下载依赖包的源码文件 
-Declipse.addVersionToProjectName=true 添加版本信息到项目名称中

3,mvn eclipse:clean

说明:清除eclipse的项目文件

Maven pom.xml文件详解

看看文件内容,没有project文件:

Maven pom.xml文件详解

五、maven-jetty-plugin插件

1,mvn jetty:run

说明: 可以直接用jetty的服务器运行 注:此命令只适用于war的模块,即web模块.

2,mvn archetype:generate

说明: 模块创建命令, 执行命令后,会提示选择创建项目的模版,这里选18(maven-archetype-quickstart) 
后面会提示你输入groupId(包存放的路径):

eg:com.lin

提示输入artifactId(模块名称):

eg:test-core

提示输入version(版本):

1.0.0-SNAPSHOT

提示输入package(指项目中基本的包路径):

eg:com.lin

提示确认,回车即可

六、maven-release-plugin插件

说明: 发行版本,可与scm工具集成,来提供版本管理.不等同与版本控制.允许是必须有goal.两个常用的goal如下:

1,mvn release:clean

清理release操作是遗留下来的文件

Maven pom.xml文件详解

2,mvn release:branch

说明: 创建分支,会在分支下创建执行的分支路径

-DbranchName=xxxx-100317 分支中的名称

-DupdateBranchVersions=false 是否更新分支的版本信息,默认为false

-DupdateWorkingCopyVersions=false 是否更新主干的版本信息,默认为true

3,mvn release:prepare

创建标记,会有交互过程,提示tag中pom的版本及trunk下的新版本号,每个模块都会询问,默认是最小版本号+1

-Dtag = 4.4.0 将在tags创建该名称文件夹

-DdryRun=true 检查各项设置是否正确,可做测试用,会产生一些修改的配置文件信息.

命令: mvn release:perform

命令会自动帮我们签出刚才打的tag,然后打包,分发到远程Maven仓库中

七、Maven站点报表

1,mvn project-info-reports:dependencies

生成项目依赖的报表

2,mvn dependency:resolve

查看依赖:

Maven pom.xml文件详解

3,mvn dependency:tree

打印出项目的整个依赖树:

Maven pom.xml文件详解

4,mvn dependency:analyze

帮助你分析依赖关系, 用来取出无用, 重复依赖的好帮手

Maven pom.xml文件详解

5,mvn install -X

追踪依赖的完整轨迹:

Maven pom.xml文件详解

6,生命周期

resource->compile->process-classes->process-test-resources->test-compile->test->prepare-package->package

resources:resources 绑定在resource处理阶段, 用来将src/main/resources下或者任何指定其他目录下的文件copy到输出目录中

resources:testResources 将test下的resources目录或者任何指定其他目录copy到test输出目录下

compiler:testCompile 将测试类编译(包括copy资源文件)

surefire:test 运行测试用例

jar:jar 打jar包

八、各种范围

1,compile(编译范围)

compile是默认的范围;如果没有提供一个范围,那该依赖的范围就是编译范围。编译范围依赖在所有的classpath中可用,同时它们也会被打包。

2,provided(已提供范围)

provided依赖只有在当JDK或者一个容器已提供该依赖之后才使用。例如,如果你开发了一个web应用,你可能在编译classpath中需要可用的Servlet API来编译一个servlet,但是你不会想要在打包好的WAR中包含这个Servlet API;这个Servlet API JAR由你的应用服务器或者servlet容器提供。已提供范围的依赖在编译classpath(不是运行时)可用。它们不是传递性的,也不会被打包。

3,runtime(运行时范围)

runtime依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如,你可能在编译的时候只需要JDBC API JAR,而只有在运行的时候才需要JDBC驱动实现。

4,test(测试范围)

test范围依赖 在一般的 编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用。

5,system(系统范围)

system范围依赖与provided类似,但是你必须显式的提供一个对于本地系统中JAR文件的路径。这么做是为了允许基于本地对象编译,而这些对象是系统类库的一部分。这样的构件应该是一直可用的,Maven也不会在仓库中去寻找它。。如果你将一个依赖范围设置成系统范围,你必须同时提供一个systemPath元素。注意该范围是不推荐使用的(你应该一直尽量去从公共或定制的Maven仓库中引用依赖)。

Maven pom.xml文件详解的更多相关文章

  1. &lbrack;maven&rsqb; pom&period;xml 文件详解

    参考资料: http://blog.csdn.net/uohzoaix/article/details/7035307 http://www.cnblogs.com/qq78292959/p/3711 ...

  2. 史上最全的maven的pom&period;xml文件详解(转载)

    此文出处:史上最全的maven的pom.xml文件详解——阿豪聊干货 <project xmlns="http://maven.apache.org/POM/4.0.0" x ...

  3. &lbrack;转&rsqb;Maven的pom&period;xml文件详解

    Maven的pom.xml文件详解------Build Settings 2013年10月30日 13:04:01 阅读数:44678 根据POM 4.0.0 XSD,build元素概念性的划分为两 ...

  4. 【maven学习】pom&period;xml文件详解

    环境 apache-maven-3.6.1 jdk 1.8 eclipse 4.7 POM是项目对象模型(Project Object Model)的简称,它是Maven项目中的文件,使用XML表示, ...

  5. 史上最全的maven的pom&period;xml文件详解

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

  6. maven的pom&period;xml文件详解

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

  7. Maven的pom&period;xml文件详解【转载】

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

  8. Maven项目pom&period;xml文件详解

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

  9. 最全的maven的pom&period;xml文件详解

    pom.xml代码: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://ww ...

随机推荐

  1. jQuery源码分析系列&lpar;33&rpar; &colon; AJAX中的前置过滤器和请求分发器

    jQuery1.5以后,AJAX模块提供了三个新的方法用于管理.扩展AJAX请求,分别是: 1.前置过滤器 jQuery. ajaxPrefilter 2.请求分发器 jQuery. ajaxTran ...

  2. 【踩坑经历】一次Asp&period;NET小网站部署踩坑和解决经历

    2013年给1个大学的小客户部署过一个小型的Asp.NET网站,非常小,用的sqlite数据库,今年人家说要换台服务器,要重新部署一下,好吧,虽然早就过了服务时间,但无奈谁叫人家是客户了,二话不说,上 ...

  3. 同一机器 部署 两个 jboss

    当jboss和oracle在同一机器上时,通常oracle占用8080端口,这时只需要去修改\deploy\jbossweb-tomcat50.sar\server.xml中.当在同一台机器上运行两个 ...

  4. Mysql 源码编译教程贴

    题外话:这是一篇教程贴,不仅学的是mysql的编译,还是一些编译的知识.我也是一个菜鸟,写一些感悟和心得,有什么问题可以批评指正,谢谢! 如果只是为了安装请移到我的另一篇安装贴: Mysql安装贴 环 ...

  5. Win7&sol;Win8&sol;Win10下安装Ubuntu14&period;04双系统 以及常见问题

    整理自网络. 1. 制作镜像 将ubantu镜像刻录到优盘(我使用UltraISO刻录,镜像下载地址:链接: http://pan.baidu.com/s/1bndbcGv 密码: qsmb) 2. ...

  6. 经典Hash函数的实现

    Hash函数是指把一个大范围映射到一个小范围.把大范围映射到一个小范围的目的往往是为了节省空间,使得数据容易保存. 除此以外,Hash函数往往应用于查找上.所以,在考虑使用Hash函数之前,需要明白它 ...

  7. shell脚本判断执行用户

    在脚本中,判断执行者是否为root. 判断方法1, #!/bin/bash if [ `whoami` != "root" ];then echo " only root ...

  8. ac1097

    判断线段与直线的相交  这里有个地方需要注意的就是在 转换的时候容易报错 在叉积完后的判断符号的时候需要注意 这个地方会超出int 的范围 2014-06-0320:14:04 #include &l ...

  9. LeetCode:36&period; Valid Sudoku(Medium)

    1. 原题链接 https://leetcode.com/problems/valid-sudoku/description/ 2. 题目要求 给定一个 9✖️9 的数独,判断该数独是否合法 数独用字 ...

  10. 实现接口Controller定义控制器

    实现接口Controller定义控制器 控制器提供访问应用程序的行为,通常通过服务接口定义或注解定义两种方法实现. 控制器解析用户的请求并将其转换为一个模型.在Spring MVC中一个控制器可以包含 ...