maven复习 (进阶+高级)

maven初级

一.manve是什么?

Manve是一个项目管理工具, pom文件 通过添加和依赖管理系统, 可以通过一小段信息来管理项目的构建, 报告和文档的项目管理工具软件 . 包含了一个项目对象模型, 一组标准集合, 一个项目的生命周期, 一个依赖管理系统 ,和用来运行定义在生命周期阶段中插入 目标的逻辑

manve的作用 (能解决什么问题)

  • 项目设置遵循统一的规则
  • 任意工程中共享
  • 依赖管理包括自动更新
  • 一个庞大且不断增长的库
  • 可扩展. 能够轻松编写Java或脚本语言插件
  • 只需很少或不需要额外的配置即时访问新功能
  • 构建工程 , 管理jar包
  • jar包依赖 编译 测试 部署

maven的坐标

坐标:每一个 jar 包或 maven 项目在网络上都有一个独一无二的身份证
坐标(GAV)

  1. groupId 公司或组织域名的倒序(仓库:包名)
  2. artifactId 项目名或模块名(仓库:项目名)
  3. version 版本号(仓库:版本号)
<groupId>com.czxy</groupId> <artifactId>maven_test2</artifactId> <version>1.0-SNAPSHOT</version>

若安装到仓库,在仓库的位置为:仓库/com/czxy/maven_test2/1.0-SNAPSHOT

Maven常见的命令
maven复习 (进阶+高级)_第1张图片

clean:清空 target 目录
compile:生成 target 目录
package:在 target 目录生成 jar 包
install:将生成的 jar 包安装到本地仓库

Maven 高级

1.依赖冲突的解决方案
manve中的依赖关系:
直接依赖: A依赖B
间接依赖:A依赖B B依赖C ,A间接依赖C
maven复习 (进阶+高级)_第2张图片

问题:如果一个项目,同时依赖另外一个 jar 的不同版本,就可能导致 jar 冲突问题。这就是传递性依赖的
Jar 版本冲突问题。
maven复习 (进阶+高级)_第3张图片

测试代码

<!--导入相关依赖包-->

<dependencies>
    <!--引入spring-context,它所以来的包都会导入进来-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.0.2.RELEASE</version>
    </dependency>

	<dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>4.2.4.RELEASE</version>
    </dependency>
</dependencies>

当jar出现冲突时,有两种做法

1)maven根据上面的两个调解原则,自动处理

2)使用exclusions标签手动,排除不需要的jar

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>4.2.4.RELEASE</version>
        <!--直接排除-->
        <exclusions>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.0.2.RELEASE</version>
    </dependency>
</dependencies>

dependencyManagement标签的作用是什么?

面对众多的依赖,有一种方法不用考虑依赖路径、声明优化等因素可以采用直接锁定版
本的方法确定依赖构件的版本,版本锁定后则不考虑依赖的声明顺序或依赖的路径,以锁定
的版本的为准添加到工程中,此方法在企业开发中常用。
如下的配置是锁定了 spring-beans 和 spring-context 的版本:

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>5.2.0.RELEASE</version>
            </dependency>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>5.2.0.RELEASE</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

还可以把版本号提取出来,使用标签设置成变量。

如:

<!--版本号-->
    <properties>
        <spring.version>5.2.0.RELEASE</spring.version>
</properties>


    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>${spring.version}</version>
            </dependency>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

继承和聚合

聚合 
  当有多个项目需要打包进仓库时(其实就是当前项目依赖很多项目,所以当前项目执行前,需要把这些依赖的项目全部install进本地仓库),一个一个执行install太麻烦,maven有一个方法可以多个项目一起install到本地仓库。就是聚合。

例如:

有A,B,C三个项目需要install,新建一个用来聚合的项目aggreation(要保证aggreation和那三个项目是同一个GroupID。这句话的意思是如果这多个项目不是同一个GroupID,就不能用聚合了?)。

然后修改aggreation项目的pom文件:
  1. 打包方式由jar修改为pom:

pom
  2. 添加 标签

 <modules>
         <module>../A</module>
         <module>../B</module>
         <module>../C</module>      
    </modules> 

这个 …/ 指什么?指maven的根目录?

应该是当前项目pom的上一级目录,其实就是所有项目存放的那个文件夹(也就是maven项目的根目录),然后就通过/A /B /C 代表当前项目和这三个项目的相对路径

然后对aggreation项目执行install命令,则项目A,B,C就都打包到本地仓库了。

执行aggreation项目如test,A,B,C项目也都会执行。即便ABC之间有依赖关系,如B依赖A,不用把A先执行安装,B同样会被执行。这是聚合的优势。

配置完聚合项目,只需要操作聚合项目,里面的项目都会被操作。不管这些项目之间是否有依赖。

继承
为什么要使用继承:

pom.xml里面的配置,如果是多个项目,势必会出现依赖和插件的重复配置。在面向对象世界中,程序员可以使用类继承在一定程度上消除重复,在Maven的世界中,也有类似的

机制能让我们抽取出重复的配置,这就是pom的继承

你可能感兴趣的:(基础,manve,maven)