Maven入门

概述

  • Maven 是 Apache 软件基金会组织维护的一款自动化构建工具(java编写),专注服务于 Java 平台的项目构建依赖管理
  • Maven 本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)
  • POM(Project Object Model):项目对象模型

Maven 作用

  • 项目构建:提供标准的,跨平台的自动化项目构建方式。
  • 依赖管理:方便快捷的管理项目依赖的资源(jar),避免资源间版本的冲突问题。
  • 统一开发结构:提供标准的,统一的项目结构。

maven基础概念

  • 仓库
    用于存储资源,包含各种jar包(Maven的插件,自己开发项目的模块,第三方框架或工具的 jar 包)。

  • 坐标
    用于描述仓库中具体资源的位置。
    查找jar的仓库坐标:https://mvnrepository.com,资源搜索条件可以是:groupId 或 artifactId。
    这个坐标是给maven工具用的,maven会根据这个坐标查找并下载资源。

    坐标组成:
      groupId:定义当前maven项目隶属组织名称(通常域名倒写)
      artifactId:定义当前maven项目名称
      version:定义当前项目版本号
    

仓库配置

  • 配置本地仓库(即:资源下载到哪)
    • setting文件默认配置
      <localRepository>${user.name}/.m2/respository</localRepository>
      
    • 修改setting文件的本地仓库地址
      <localRepository>D:\mavenCompany\repository</localRepository>
      
  • 配置阿里镜像仓库(即:资源从哪来)
    • 默认配置是从中央仓库下载
    • setting文件中修改为阿里镜像下载
      <mirrors>
          <!-- 配置具体仓库的下载镜像 -->
          <mirror>
              <!-- 镜像的维一标识,自定义 -->
      	    <id>mirror-aliyun</id>
      	    <!-- 表示对哪一个仓库进行镜像 -->
      	    <mirrorOf>central</mirrorOf>
      	    <!-- 镜像仓库的名称 -->
      	    <name>mirror</name>
      	    <!-- 镜像仓库组的URL -->
      	    <url>https://maven.aliyun.com/nexus/content/groups/public</url>
          </mirror>
      </mirrors>
      

使用IDEA创建一个maven工程

Maven生命周期及常用命令

构建(build),是面向过程的(从开始到结尾的多个步骤),涉及到多个环节的协同工作。构建过程的几个主要环节 :清理、编译、测试、报告、打包、安装、部署 。
对项目的构建是建立在生命周期模型上的,它明确定义项目生命周期各个阶段,并且对于每一个阶段提供相对应的命令。
构建项目时按照生命周期顺序构建,每一个阶段都有特定的插件来完成。不论现在要执行生命周期中的哪个阶段,都是从这个生命周期的最初阶段开始的

mvn clean         清理(会删除原来编译和测试的目录,即 target 目录,但是已经 install 到仓库里的包不会删除)
mvn compile       编译主程序(会在当前目录下生成一个 target,里边存放编译主程序之后生成的字节码文件)
                  理解:
                    1. 编译src/main/java/目录下的java文件编译为class文件,同时把class文件拷贝到target/classes目录下面
                    2. 把src/main/resourses目录下的所有文件都拷贝到target/classes目录下
mvn test-compile  编译测试程序(会在当前目录下生成一个 target,里边存放编译测试程序之后生成的字节码文件)
                  理解:
                    1. 编译src/main/test/目录下的java文件编译为class文件,同时把class文件拷贝到target/test-classes目录下面
mvn test          测试(会生成一个目录surefire-reports,保存测试结果)
mvn package       打包主程序(会编译、编译测试、测试、并且按照 pom.xml 配置把主程序打包生成 jar 包或者 war 包)
                  理解:
                    1. 把程序中src/main/目录下面编译后的class文件,和resources中的配置文件放入一个压缩文件。
mvn install       安装主程序(会把本工程打包,并且按照本工程的坐标保存到本地仓库中)
mvn deploy        部署主程序(会把本工程打包,按照本工程的坐标保存到本地库中,并且还会保存到私服仓库中。还会自动把项目部署到 web 容器中)。
  • jar包本地仓库安装的路径

依赖管理(例:A依赖B,B依赖C)

  • 依赖传递

    • 直接依赖:A直接依赖B
    • 间接依赖:A间接依赖C
    • 依赖传递冲突问题:
      • 路径优先:依赖中出现相同资源,层级越深,优先级越低
      • 声明优先:依赖的资源处于同一级别,优先使用配置的顺序靠前的
  • 排除依赖
    A间接依赖C,但是A可以选择不使用C

  • 可选依赖
    指可选依赖对外隐藏自已依赖的资源,比如B对A屏蔽C的资源

聚合(用于快速构建项目)

作用:用于快速构建maven项目,一次性构建多个项目/模块。
操作:先定义一个空模块(打包方式为pom)用于管理其他项目,然后关联其他模块名称。
注意:参与聚合操作的模块最终指向顺序与模块间的依赖关系有关,与配置顺序无关。

继承(用于快速配置)

作用:通过继承可以实现子工程沿用父工程的配置。实现版本统一管理。
操作:在父工程中定义依赖管理(父工程打包方式为pom),在子工程中声明父工程的坐标及pom文件位置。(只需要在子工程中添加使用的依赖即可,不需要添加版本号了)

属性

  • 自定义属性
    • 定义格式

    • 调用方式

私服


setting文件配置:

<mirrors>
   <!-- 配置具体仓库的下载镜像 -->
   <mirror>
   	<!-- 镜像的维一标识,自定义 -->
   	<id>nexus-mycompany</id>
   	<!-- 表示对哪一个仓库进行镜像 -->
   	<mirrorOf>central</mirrorOf>
   	<!-- 私服仓库组的URL -->
   	<url>https://maven.aliyun.com/nexus/content/groups/public</url>
   </mirror>
</mirrors>

<!-- 配置本地仓库上传到哪一个仓库 -->
<servers>
   <server>
   	<!-- id:保持和宿主仓库名称一致 -->
       <id>abc-releases</id>
       <!-- 私服的账号密码 -->
       <username>***</username>
       <password>***</password>
   </server>
   <server>
       <id>abc-snapshots</id>
       <username>***</username>
       <password>***</password>
   </server>
</servers>

参考:https://www.bilibili.com/video/BV1Ah411S7ZE?p=1

posted @ 2021-10-31 21:28  扬帆去远航  阅读(70)  评论(0)    收藏  举报