pom.xml解释

<?xml version="1.0" encoding="UTF-8"?>
<!--project 标签:根标签,表示对当前工程进行配置、管理-->
<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 标签:从Maven2开始就固定是4.0.0--><!--代表当前pom.xml所采用的标签结构--><modelVersion>4.0.0</modelVersion><!--坐标信息--><!--在本地仓库中安装后对应的路径:com\seer\maven\seer-heathy-demo\1.0-SNAPSHOT\seer-heathy-demo-1.0-SNAPSHOT.jar--><!--groupId 标签:坐标向量之一;代表公司或组织开发的某一个项目--><groupId>com.seer.maven</groupId><!--artifactId 标签:坐标向量之一;代表项目下的某一个模块--><artifactId>seer-heathy-demo</artifactId><!--version 标签:坐标向量之一;代表当前模块的版本--><version>1.0-SNAPSHOT</version><!--packaging 标签:打包方式--><!--取值jar:生成jar包,说明这是一个Java工程--><!--取值war:生成war包,说明这是一个Web工程--><!--取值pom:说明这个工程是用来管理其他工程的工程--><packaging>jar</packaging><name>seer-heathy-demo</name><url>http://maven.apache.org</url><!--在Maven中定义属性值--><properties><!--在构建过程中读取源码时使用的字符集--><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><!--dependencies标签:配置具体依赖信息,可以包含多个dependency子标签--><dependencies><!--dependency 标签:配置一个具体的依赖信息--><dependency><!--坐标信息:导入那个jar包,就配置它的坐标信息即可--><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><!--scope标签:配置当前依赖的范围--><scope>test</scope></dependency></dependencies></project>

创建java版的maven工程

1、Maven中的坐标
groupId:公司或组织的id
artifactId:一个项目或者是项目中的一个模块的id
version:版本号

groudid:公司或组织域名的倒序,通常也会加上项目名称
列如:com.seer.maven
artifactid:模块的名称,将来作为Maven工程的工程名
version:模块的版本号,根据自己的需要的设定
列如:SNAPSHOT表示快照版本,正在迭代过程中,不稳定版本
列如:RELEASE表示正式版本

坐标和仓库中的jar包的存储路径之间的对应关系
坐标:

<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5<version>

上面坐标对应jar在Maven本地仓库中的位置:

Maven本地仓库根目录\javax\servlet\servlet-api\2.5\servlet-api-2.5.jar

使用maven命令生成Maven工程
运行 mvn archetype:generate 命令

POM:projectObjectModel,项目对象模型。和POM类似的是:DOM(Doucument Object Model),文档对象模型。他们都是模型化思想的具体实现。

开发领域的技术发展趋势就是:约定大于配置,配置大于编码

Maven执行构建命令
1、mvn -v命令和构建操作无关,只要正确配置了PATH,在任何目录下都可以执行。
2、清理操作
mvn clean
效果:删除target目录
3、编译操作
主程序编译:mvn compile
测试程序编译:mvn test-compile
主体程序编译结果存放的目录:target/classes
测试程序编译结果存放的目录:target/test-classes
4、测试操作
mvn test
测试报告存放的目录:target/surefire-reports
5、打包操作
mvn package
打包结果--jar包,存放的目录:target
6、安装操作
mvn install
安装的效果是将本地构建过程中生成的jar包存入Maven本地仓库。这个jar包在Maven仓库中的路径是根据它的坐标生成的。

坐标:

<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5<version>

上面坐标对应jar在Maven本地仓库中的位置:

Maven本地仓库根目录D:\maven-repo\javax\servlet\servlet-api\2.5\servlet-api-2.5.jar

另外,安装操作还会降pom.xml文件转换为XXX.pom文件一起存入本地仓库。所以我们在maven的本地仓库想看一个jar包原始的pom.xml文件时,查看对应的XXX.pom文件即可,他们是名字发生改变,本质上是同一个文件。

创建web版的maven工程
参数archetpeGroupId、archetypeArtifactId、archetypeVersion用来指定现在使用的maven-archetype-webapp的坐标
在一个工作空间根目录来操作,不能在一个非pom的工程下在创建其他工程。

mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DarchetypeVersion=1.4

测试依赖范围
标签的位置:dependencies/dependency/scope
标签的可选值:compile/test/provided/system/runtime/import

compile:解释
provided:已提供

      <!--dependency 标签:配置一个具体的依赖信息--><dependency><!--坐标信息:导入那个jar包,就配置它的坐标信息即可--><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><!--scope标签:配置当前依赖的范围--><scope>test</scope></dependency><dependency><!--坐标信息:导入那个jar包,就配置它的坐标信息即可--><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><!--scope标签:配置当前依赖的范围--><!--表示会被大金war包--><scope>compile</scope></dependency><dependency><!--坐标信息:导入那个jar包,就配置它的坐标信息即可--><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><!--scope标签:配置当前依赖的范围--><!--表示已提供的,war包里面不会被打包进去--><scope>provided</scope></dependency>

 结论:

compile:通常使用的第三方的框架jar包这样在项目实际运行时真正要用到的jar包都是以compile范围进行依赖,比如SSM框架所需要的jar包
test:测试过程中使用的jar包,以test范围依赖过来,比如junit。
provided:在开发过程中需要用到的“服务器上的jar包”通常provided范围依赖进来。比如servlet-api、jsp-api。而这些范围的jar包之所以不参与部署、不放进war包,就是避免和服务器上已有的同类jar包产生冲突,同时减轻服务器的负担。说白了就是“服务器上已经有了,你就别带了”

排除依赖:设置方式

       <dependency><groupId>com.atguigu.maven</groupId><artifactId>pro01-maven-java</artifactId><version>1.0-SNAPSHOT</version><scope>compile</scope><!--使用excludes标签配置依赖的排除--><exclusions><!--在exclude标签中配置一个具体的排除--><exclusion><!--指定要排除的依赖坐标(不需要写version)--><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId></exclusion></exclusions></dependency>

在dependency元素中除了可以指定依赖项目的groupId、artifactId和version之外,还可以指定以下元素: 

type:对应于依赖项目的packaging类型,默认是jar

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将报错。

optional:当该项目本身作为其他项目的一个依赖时标记该依赖为可选项。假设现在projectA有一个依赖性projectB,我们把projectB这个依赖项设为optional,这表示projectB在projectA的运行时不一定会用到。这个时候如果我们有另一个项目projectC,它依赖于projectA,那么这个时候因为projectB对于projectA是可选的,所以Maven在建立projectC的时候就不会安装projectB,这个时候如果projectC确实需要使用到projectB,那么它就可以定义自己对projectB的依赖。当一个依赖是可选的时候,我们把optional元素的值设为true,否则就不设置optional元素。

exclusions:考虑这样一种情况,我们的projectA依赖于projectB,然后projectB又依赖于projectC,但是在projectA里面我们不需要projectB依赖的projectC,那么这个时候我们就可以在依赖projectB的时候使用exclusions元素下面的exclusion排除projectC。

属性:

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

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

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

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

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

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

pom.xml详解撸一下基础相关推荐

  1. maven provided_Maven 教程之 pom.xml 详解

    点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 作者:dunwu https://github.com/dunwu/blog 推荐阅读(点 ...

  2. maven核心,pom.xml详解

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

  3. 五十一、创建第一个Maven项目和pom.xml 详解

    @Author:Runsen @Date:2020/6/12 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏 ...

  4. Maven实战:Pom.xml详解

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

  5. maven pom.xml详解

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

  6. maven的标准pom.xml详解

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

  7. Ant之build.xml详解

    Ant的概念  可能有些读者并不连接什么是Ant以及入可使用它,但只要使用通过Linux系统得读者,应该知道 make这个命令.当编译Linux内核及一些软件的源程序时,经常要用这个命令.Make命令 ...

  8. Maven中pom文件详解

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

  9. Tomcat(二):tomcat配置文件server.xml详解和部署简介

    1. 入门示例:虚拟主机提供web服务 该示例通过设置虚拟主机来提供web服务,因为是入门示例,所以设置极其简单,只需修改$CATALINA_HOME/conf/server.xml文件为如下内容即可 ...

最新文章

  1. java判断波动的曲线是否大体平衡_基于标的物价格和波动率的期权投资策略
  2. C语言位操作--判断整数是否为2的幂
  3. Springboot mybatis逆向工程org.springframework.beans.factory.BeanCreationException: Error creating bean错误
  4. Python学会使用虚拟环境——pipenv
  5. Html5响应式设计与实现广场
  6. Active Directory授权还原
  7. 张小龙Linux微信,微信至今没有黑暗模式,原来是张小龙“全责”?
  8. 【BZOJ3295】动态逆序对,CDQ分治/BIT套权值线段树
  9. android转iOS看什么书,一起聊聊:是什么让你从Android转向iOS?
  10. devcloud 基础架构
  11. 基于Springboot的高校二手交易网站平台设计与实现
  12. Win10 + Ubuntu 安装教程(痛苦踩坑)
  13. 中国科技大学计算机系导师,中国科学技术大学
  14. Unity3D自学笔记
  15. 苹果自带输入法怎么换行_iPhone输入无法换行?这些办法解决你的问题
  16. win10安装mmcv和mmcv-full报错
  17. AnySim一键解锁教程nbsp;只适用于新iPhone
  18. “岁月静好,现世安稳
  19. 期末前端web大作业:餐饮美食网站设计与实现——HTML+CSS+JavaScript美食餐饮网站 3页面
  20. 2022年计算机一级考试MS Office复习题及答案

热门文章

  1. 敏捷开发项目管理流程
  2. java中原子变量AtomicInteger等用法
  3. games101学习笔记_Geometry1(几何)
  4. 原谅我一直对B站有误解!
  5. MySQL可重复读隔离级别能解决幻读吗?
  6. Oracle11g R2相比R1的区别
  7. 用于时间机器备份的文件服务器地址,一日一技 | 如何解决时间机器在 NAS 上创建备份失败的问题?...
  8. 短视频如何做好引流与推广,分享四个快速涨粉方案
  9. [Java]源码角度深入理解哈希表,手撕常见面试题
  10. win10计算机网络设置在哪,win10网络设置:如何设置IP地址和DNS地址--系统之家