Maven学习记录

约定优先于配置,配置优先于编码

Maven仓库:https://mvnrepository.com/


为什么需要Maven?未学习Maven前可能会遇到的问题:

①项目中需要用到的jar包需要手动一个个复制粘贴到lib目录下,导致重复jar包过多,项目臃肿;

②手动下载的jar包来源不同,内容可能不规范;

③一个jar包所依赖的其他jar包也需要手动导入,过程十分复杂繁琐,增加了学习成本。


Maven是基于项目对象模型(POM project object model),可以通过一小段描述信息(配置)来管理项目的构建,报告和文档的软件项目管理工具——百度百科

Maven是一款自动化构建工具,专注服务于Java平台的项目构建和依赖管理。

核心功能是合理叙述项目间的依赖关系。通俗点讲,就是通过pom.xml文件的配置获取jar包,而不用手动去添加jar包。

每个Maven项目都包含一个pom.xml文件,文件中记录了若干字段,这些字段在创建Maven项目时填写,Maven会依据它们来定位到该项目。


以下是各字段的个人理解:

<?xml version="1.0" encoding="UTF-8"?>
<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">

    <!--pom.xml填写练习-->

    <!--父项目坐标-->
    <parent>
        <groupId>cn.yrwan.parent</groupId>
        <artifactId>demo</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <!--当前文件到父工程pom文件的相对路径-->
        <relativePath>../Parent/pom.xml</relativePath>
    </parent>


    <!--声明项目遵循哪一个POM模型版本-->
    <modelVersion>4.0.0</modelVersion>

    <!--全球唯一标识符,用以定位,域.组织-->
    <groupId>cn.yrwan</groupId>
    <!--构件的标识符,用以定位-->
    <artifactId>demo</artifactId>
    <!--项目当前版本,格式为:主版本.次版本.增量版本-限定版本号-->
    <version>1.0.0-SNAPSHOT</version>
    <!--项目名称, Maven产生的文档用-->
    <name>demo-maven</name>
    <!--打包类型 pom、jar、war-->
    <packaging>jar</packaging>


    <!--子项目管理,聚合-->
    <modules>
        <!--子项目相对路径-->
        <module>moduleA</module>
        <module>moduleB</module>
        <module>moduleC</module>
    </modules>

    <!--属性声明-->
    <properties>
        <!--自定义标签,可方便版本的统一,或一次性修改重复参数-->
        <junit.version>4.12</junit.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <!--将父工程的dependencies标签,放在dependencyManagement中,只起到声明依赖的作用,并不实现引入
    用来管理依赖jar版本号,一般出现在项目最顶层公共的pom.xml文件中,子模块若想使用此处声明的jar包,
    只需要在其dependency中添加groupId和artifactId即可,无需填写version,可以保持jar包版本号统一。
    -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>%{junit.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <!--项目引入插件所需要的额外依赖-->
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <!--依赖的范围,compile为全部,test为测试程序,provided为非部署-->
            <scope>test</scope>

            <!--依赖排除,可用来排除不稳定或冲突的依赖-->
            <exclusions>
                <exclusion>
                    <groupId>xxx</groupId>
                    <artifactId>xxx</artifactId>
                </exclusion>
            </exclusions>

        </dependency>
    </dependencies>

    <!--编译工具和插件-->
    <build></build>

</project>

Maven仓库分为本地仓库和远程仓库,其中远程仓库又分为私服,中央仓库,镜像库。

这里提供一个阿里的镜像库,访问速度很快,配置在settings.xml中:

<mirrors>
    <mirror>
        <id>nexus-aliyun</id>
        <name>Nexus aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
</mirrors>

依赖调节原则:

1、第一原则:路径近者优先原则

          A-->B-->C-->D-->X(1.6)

          E-->D-->X(2.0)

          使用X(2.0),因为其路径更近 

2、第二原则:第一声明者优先原则。就是如果路径相同,Maven 默认配置在前面的优先使用

          A-->B --> X(1.6)

          C-->D--> X(2.0)

          这样就是路径相同,那么如果A在前面,C在后面,则使用X(1.6)

Maven会先根据第一原则进行选择,第一原则不成,则按第二原则处理。

依赖排除:<exclusions>

<!--依赖冲突的问题测试,第一原则为路径近者优先,第二原则为第一声明优先-->
<dependency>
    <!--依赖的spring-core版本为5.1.4.RELEASE-->
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>5.1.4.RELEASE</version>
    <!--通过依赖排除可以人为排除指定依赖包-->
    <exclusions>
        <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <!--依赖的spring-core版本为4.3.20.RELEASE-->
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-spring-plugin</artifactId>
    <version>2.5.20</version>
</dependency>

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值