4.Maven之pom.xml解析

1.什么是pom.xml

       pom.xml作为项目对象模型。通过xml表示maven项目,使用pom.xml来实现。主要描述了项目:包括配置文件;开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url,项目的依赖性,以及其他所有的项目相关因素。

2.settings.xml和pom.xml的区别

        settings.xml与pom.xml,可以说是Maven中最重要的两个配置文件,决定了Maven的核心功能。settings.xml配置maven本身的一些设置如maven仓库地址等,pom.xml里统一管理你项目所需jar包

3.pom.xml相关属性详解

①modelVersion

<!--maven超级pom版本-->
<modelVersion>4.0.0</modelVersion>

②groupId

  groupId、artifactId、version三者被称为Maven坐标,可以唯一确定

<!--公司名称(公司域名倒过来写)-->
<groupId>com.gupao</groupId>

③artifacted

<!--功能命名-->
<artifactId>maven-project</artifactId>

④version

<!--版本号-->
<version>1.0-SNAPSHOT</version>

⑤packaging

<!--当前工程打包方式(不配置默认是打jar包,打war包需要配置)-->
<packaging>war</packaging>

⑥description

<!--项目描述信息-->
<description>描述信息</description>

⑦properties

<!--定义pom中用到的一些参数,变量,在使用时通过${xxx}的形式来使用-->
<properties>
    <org.springframework-version>4.3.7.RELEASE</org.springframework-version>
    <druid.version>1.0.9</druid.version>
    <mybatis.version>3.3.0</mybatis.version>
    <mybatis-spring.version>1.2.4</mybatis-spring.version>
</properties>

⑧dependencyManagement

<!--dependencyManagement强烈建议只在父pom中使用-->
<!--在父pom中声明,相当于提前声明整个工程需要使用的某些jar包,并且给定了版本号,在子pom中如果需要使用,和普通引入jar的形式一样,只是不需要再定义version版本号。因为子pom会层层向上到dependencyManagement面去找有没有对该artifactId和groupId进行过版本声明。如果有,就继承它,如果
没有就会报错,告诉你必须为dependency声明一个version-->
<!--主要作用:1.统一版本号  2.提前声明引用的jar(子pom里用到时,需要再引入)-->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>

⑨dependency

<!--dependency中包括groupId、artifactId、version等,此处主要讲解scope作用域-->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.1.2</version>
    <scope>test</scope>
</dependency>

⑩scope

<!--scope元素的作用:控制 dependency 元素的使用范围。通俗的讲,就是控制 Jar 包在哪些范围被加载和使用。-->

  scope有五种可选:

     a)compile

<!--编译:默认值。如果没有指定 scope 值,该元素的默认值为 compile。被依赖项目需要参与到当前项目的编译,测试,打包,运行等阶段。-->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>${mybatis.version}</version>
</dependency>

    b)test 

<!--测试:表示被依赖项目仅仅参与测试相关的工作,包括测试代码的编译,执行。-->
<!--适用场景:例如,junit包,我们只有在进行单元测试等的时候才会用到,所以scope可以定义为test-->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.1.2</version>
    <scope>test</scope>
</dependency>

    c)provided

<!--可以认为这个provided是目标容器已经provided这个artifact。换句话说,它只影响到编译,测试阶段。在编译测试阶段,我们需要这个artifact对应的jar包在classpath中,而在运行阶段,假定目标的容器(比如我们这里的liferay容器)已经提供了这个jar包,所以无需我们这个artifact对应的jar包了。-->
<!--适用场景:例如,如果我们在开发一个web 应用,在编译时我们需要依赖 servlet-api.jar,但是在运行时我们不需要该jar包,因为这个jar包已由应用服务器提供,此时我们需要使用 provided 进行范围修饰-->
<dependency>
    <groupId>javax.servlet</groupId> 
    <artifactId>javax.servlet-api</artifactId> 
    <version>3.0.1</version> 
    <scope>provided</scope>
</dependency>

    d)runtime

<!--运行时:runntime表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile相比,跳过编译而已-->
<!--适用场景:例如,在编译的时候我们不需要JDBC API的jar包,而在运行的时候我们才需要JDBC驱动包-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.15-bin</version>
    <scope>runtime</scope>
</dependency>

    e)system

<!--被依赖项不会从 maven 中央仓库中查找,而是从本地系统中获取。配合systemPath使用,systemPath元素用于制定本地系统中 jar 文件的路径-->
<!--使用场景:比如:公司写了一个common-lib包,不在maven中央仓库的情况,那么该怎么办才能够使用到该jar包???-->
<!--有如下三种方法:
    1.放到公司私服中去 
    2.用之前的方式add到classpath中(不方便)  
    3.使用system配以systemPath的形式
    团队使用:最好建议放到私服中去!!!
-->
<dependency>
    <groupId>com.gp.springmvc</groupId>
    <artifactId>gp-common-lib</artifactId>
    <scope>system</scope>
    <systemPath>${basedir}/WEB-INF/lib/common-lib.jar</systemPath>
</dependency>

⑪exclusions 

<!--排除的意思,jar包冲突的时候排除使用-->
<!--用maven管理库依赖,有个好处就是连同库的依赖的全部jar文件一起下载,免去手工添加的麻烦,但同时也带来了同一个jar会被下载了不同版本的问题,好在pom的配置里面允许用<exclusion>来排除一些不需要同时下载的依赖jar -->
<!--多技术默认依赖common-logging.jar,某些人并不想使用默认的,或者想使用slf4j等等处理日志。在Spring中,可以通过如下配置干掉common-logging,引入slf4j日志系统。-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
	<version>4.1.8.RELEASE</version>
	<exclusions>
        <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扛麻袋的少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值