Maven学习

Maven学习

Maven的概念

Maven是Apache下的一个开源项目,主要使用java语言实现,它用于对java项目进行项目构建和依赖管理以及项目信息管理。

Maven是基于项目对象模型(Project object model),俗称POM。简单来说,maven就是项目依赖管理工具,将项目中的使用的依赖进行统一管理。通过pom.xml文件来进行配置,自动获取项目jar包,解决依赖冲突问题。

Maven的作用

项目构建

项目构建,是指一个项目清理、编译、测试、报告、打包、安装、部署等过程,Maven中把这些过程进行标准化管理,可以通过一个命令,自动按照顺序依次执行每一个步骤。

  1. clean:将之前编译得到的旧class文件字节码文件删除
  2. compile:将java源程序编译成class字节码文件
  3. test:自动测试,调用junit程序
  4. report:测试程序执行结果
  5. package:动态web工程打成war包,java工程打jar包
  6. install:将打包文件复制到maven仓库指定位置
  7. deploy:将工程生成结果放到服务器或者容器

依赖管理

maven将项目中所依赖的外部jar包进行统一管理。

主要解决了不同官网下载不同的jar包,自测jar包冲突问题,jar依赖关系分析等等。

dependency特性

➢ 依赖调解

第一原则:路径最短者优先,A -> B -> C ->X(1.0), A -> D -> X(2.0),此时A只会依赖X(2.0)

第二原则:第一声明者优先,当第一原则无法解决依赖冲突时,则按在pom中依赖声明的顺序决定

依赖管理关键标签

dependencyManagement

  • 节点中定义依赖信息,在后续引入依赖时不用重复定义version、scope等

  • 节点中定义的依赖无法直接生效,只是作为管理使用

  • 在具体artifact中需要引用依赖的时候有两种方式实现

    ○ 1. 在节点中列出依赖

    ○ 2. 在父pom的节点中列出依赖

dependencies

  • 节点中定义的依赖在编译时build,自动会引入此包到路径下

  • 除非在dependencyManagement中有定义版本,否则版本不能为空

  • 在具体artifact中需要引用依赖的时候有两种方式实现

    ○ 1. 在节点中列出依赖

    ○ 2. 在父pom的节点中列出依赖

两者的区别

Management作为管理,只是将项目所需要的依赖进行列举,最终使用需要dependencies标签中定义。

dependencyManagement与dependencies 标签并列使用。

<properties>
    <mybatis.version>1.3.0</mybatis.version>
    <spring.version>2.4.5</spring.version>
</properties>

<dependencyManagement>
    <dependencies>
        <!--web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!--Mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>${mybatis.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <!--test-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>

    <!--Mysql-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

    <!--Lombok-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
</dependencies>

上述pom.xml中出现标签解释:

属性定义:主要对依赖版本统一定义管理

使用时用${属性名称},如${spring.version}

依赖坐标的标签定义:

一个Java构件的五大坐标元素

➢ groupId:组Id

➢ artifactId: 项目的Id

➢ version: 版本

➢ package: 包类型

➢ classifier: 分类,如二进制包,源、文档等

其余标签

默认是compile, compile编译、测试、运行都有效, 如果是war包在生成的lib中会将这个依赖打进行 provided是容器提供,war包中的lib下不会打进行 test是测试使用,runtime、system

classifier分类定义类别,这个需要配合依赖提供方提供的分类使用

两个标签配合使用,去除jar包中所依赖的包

去除jar包中所依赖的所有其他包,只留自己

dependency依赖检查

通过命令解析jar包中的所有依赖关系

⚫ mvn dependency:analyze

⚫ mvn dependency:tree

⚫ mvn dependency:list

Maven项目的目录约定

MavenProjectRoot(项目根目录 必须)
|----src
| |----main
| | |----java ——存放项目的.java文件 (必须)
| | |----resources ——存放项目资源文件,如spring, hibernate配置文件 (必须)
| |----test
| | |----java ——存放所有测试.java文件,如JUnit测试类 (可选)
| | |----resources ——存放项目资源文件,如spring, hibernate配置文件(可选)
|----target ——项目输出位置
|----pom.xml ----用于标识该项目是一个Maven项目(必须)

maven的安装

  1. 安装Maven,安装命令如下:
sudo apt-get install maven

2.测试Maven是否安装成功,查看Maven版本命令:

mvn --version

3.修改配置文件setting.xml

搜索阿里源镜像,在公司根据不同的仓库进行设置

maven演示

  1. 新建maven项目

  • 测试
mvn test

  • 清理 清除构建生成的target文件夹
mvn clean
  • 打包 将项目打包为war或者jar包
mvn package # 只是打包,jar包从本地仓库寻找
mvn install # 打包,并下载到本地仓库
  • 编译 将项目编译为class文件,生成classes文件夹
mvn compile

maven插件

插件的生命周期

Maven的生命周期是抽象的,其中的具体任务都交由插件来完成。Maven为大多数构建任务编写并绑定了默认的插件,如针对编译的插件:maven-compiler-plugin。用户也可自行配置或编写插件。

三套生命周期

  Maven定义了三套生命周期:clean、default、site,每个生命周期都包含了一些阶段(phase)。三套生命周期相互独立,但各个生命周期中的phase却是有顺序的,且后面的phase依赖于前面的phase。执行某个phase时,其前面的phase会依顺序执行,但不会触发另外两套生命周期中的任何phase。

1、clean生命周期

pre-clean :执行清理前的工作;

clean :清理上一次构建生成的所有文件;

post-clean :执行清理后的工作

2、default生命周期

default生命周期是最核心的,它包含了构建项目时真正需要执行的所有步骤。

  1. validate
  2. initialize
  3. generate-sources
  4. process-sources
  5. generate-resources
  6. process-resources :复制和处理资源文件到target目录,准备打包;
  7. compile :编译项目的源代码;
  8. process-classes
  9. generate-test-sources
  10. process-test-sources
  11. generate-test-resources
  12. process-test-resources
  13. test-compile :编译测试源代码;
  14. process-test-classes
  15. test :运行测试代码;
  16. prepare-package
  17. package :打包成jar或者war或者其他格式的分发包;
  18. pre-integration-test
  19. integration-test
  20. post-integration-test
  21. verify
  22. install :将打好的包安装到本地仓库,供其他项目使用;
  23. deploy :将打好的包安装到远程仓库,供其他项目使用;

3、site生命周期

  1. pre-site
  2. site :生成项目的站点文档;
  3. post-site
  4. site-deploy :发布生成的站点文档

posted on 2022-07-07 09:16  Chase_Hanky  阅读(135)  评论(0编辑  收藏  举报