maven简单介绍

1. 下载安装

maven官网:http://maven.apache.org/download.cgi

建议Windows平台下载*.zip压缩包,而Linux平台下载.gz压缩包
在这里插入图片描述

  1. 下载完放到指定目录下解压即可,然后配置一下环境变量,在cmd里面使用mvn -v 命令查看是否安装成功即可
  2. 配置远程仓库镜像地址,下面推荐使用阿里的镜像仓库,在公司需要配置公司的私有仓库
    <mirror>
    	<id>nexus-aliyun</id>
    	<mirrorOf>*</mirrorOf>
    	<name>Nexus aliyun</name>
    	<url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>

2. Maven的约定

Maven采用了”约定优于配置(Convention over Configuration,CoC)”的原则,根据此原则,Maven的主要约定有如下几条:

  • 源代码应该位于${basedir}/src/main/java路径下
  • 资源文件应该位于${basedir}/src/main/resourse路径下
  • 测试代码应该位于${basedir}/src/test路径下
  • 编译生成的class文件应该位于${basedir/target/classes}路径下
  • 项目应该会产生一个JAR文件,并将生成的JAR包放在${basedir}/target路径下

3. Maven的简化版生命周期

在这里插入图片描述
上图就是maven的简化版生命周期,分别介绍一下:

  • clean:执行清理, 就是删除 target 文件夹
  • validate: 验证项目是否正确,所有必要的信息可用
  • compile: 编译项目的源代码
  • test : 使用合适的单元测试框架测试编译的源代码。
  • package : 项目打包
  • verify: 对集成测试的结果执行任何检查,以确保满足质量标准
  • install : 安装到本地仓库
  • deploy: 部署到远程仓库

下图显示了默认的生命周期所包含的核心阶段的执行过程:
在这里插入图片描述

4. Maven的坐标(coordinate)

POM需要为项目提供一个唯一标识符,
这个标识符就被称为Maven坐标,Maven坐标由4个元素组成

  • groupId: 该项目的开发者的域名
  • artifactId:指定项目名
  • package: 指定项目打包的类型
  • version: 指定项目的版本

5. Pom文件玩法

下面我就从0新搭建一个maven父子工程来讲一些基础玩法哈

  • 创建父工程
    在这里插入图片描述
    在这里插入图片描述
  • 因为这是父工程,我就把src删掉了,没啥用,看到的就是下面这个
    在这里插入图片描述
  • modelVersion : 这个创建maven就会自动生成,指定了当前POM模型的版本,对于Maven2及Maven 3来说,它只能是4.0.0
  • 其他三个是你自己创建时定义的,具体看图中注释哈

5.1 父工程里面

几个常用的配置:

5.1.1 配置 <packaging>pom</packaging>
  • 定义packaging为pom,表示他是爸爸,如果存在子工程,这里必须时pom。表示子工程需要继承父工程
  <packaging>pom</packaging>
  • name 标签:开发常用的简称,推荐中文结合
 <name>${project.artifactId} | 测试父工程</name>

在这里插入图片描述

  • description 标签:核心功能和在整个架构中的作用,就是一些描述信息
  • inceptionYear 标签: 开发年份
  • url 标签: url链接
5.1.2 配置 parent
  • 指定父工程
    接下来是指定父工程,比如我指定boot的版本是2.1.5
    如果这段配置放在父工程里面,接下来所有的子工程都不需要配置,直接继承使用即可
 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.5.RELEASE</version>
    </parent>
5.1.3 配置 properties
  • 配置 properties
<properties>
  <java.version>1.8</java.version>
  <spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
  <spring-cloud-alibaba.version>0.9.0.RELEASE</spring-cloud-alibaba.version>
   <lombok.version>1.16.20</lombok.version>
 </properties>

定义jar包的版本库,用来统一版本号,避免冲突
注意: boot和Cloud版本是有对应关系的,搞不清访问下面这个链接,是官方提供的:
https://start.spring.io/actuator/info

5.1.4 配置 dependencyManagement
  • 配置 dependencyManagement声明依赖:
 <dependencyManagement>
        <dependencies>
            <!-- spring-cloud主版本管理  -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- spring-cloud-alibaba主版本管理  -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- lombok主版本管理  -->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
                <scope>provided</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

dependencyManagement只是声明依赖,并不实现引入,因此子项目需要显式的声明需要用的依赖。
如果不在子项目中声明依赖,是不会从父项目中继承下来的;
只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;
另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本;

通俗点说就是,dependencyManagement只是一个声明定义,子工程要用,就在子工程里面直接用,不需要指定版本号,会引用父工程的版本号,如果子工程不想用父工程里面声明的版本号,就自己指定,完事;

注意:<type>pom</type><scope>import</scope> 的玩法:
pom和import的作用在于解决maven的单继承问题
通俗一点的理解就是,你可以理解为把外面的parent扔到了dependencyManagement里面,比如上面的 spring-boot-starter-parent 是通过parent标签放在外面的,现在我把它丢到dependencyManagement里面,如果想达到相同的效果,就必须使用pom和import标签;位置不同,使用的标签不同而已

5.1.5 配置 dependencies

注意: 在父工程里面配置dependencies,会强制性的会添加到子模块当中,子模块一定会加载,所以这里我们一般不配置
在这里插入图片描述

5.16 relativePath 玩法

在这里插入图片描述
如上图所示:加在那的作用就是表示一直从远程仓库获取,不走本地仓库
默认是…/pom.xml 但是如果设定为空值,不就是避开本地仓库嘛哈哈

MAVEN构建jar包时候查找顺序:
relativePath元素中的地址本地仓库远程仓库

5.2 子工程

基于父工程创建子工程,以上面的为案列:

<?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">
    <parent>
        <artifactId>wql-maven</artifactId>
        <groupId>com.ooo</groupId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>wql-maven-user</artifactId>
</project>

默认会关联父工程,因为版本已经在父工程定好了,我们只需要引入需要的依赖即可,不需要指定版本,避免了版本冲突问题

    <packaging>jar</packaging>
    <name>${project.artifactId} | 测试user子工程</name>

    <!-- 从父类当中选择要添加的jar,不需要定义版本号-->
    <dependencies>
        <!--web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--提供监控系统健康情况的工具-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--seata 根据下载的版本来-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
        </dependency>
    </dependencies>

6. scope 标签玩法

指定依赖库起作用的范围。
该子元素可接受compile、provided、test、system、runtime、import等值;

  • compile:默认的范围,编译、测试、打包时需要

  • provided:表示容器会在runtime时提供

  • runtime:表示编译时不需要,但测试和运行时需要,最终打包会包含进去

  • test:只用于测试阶段

  • system:与provided类似,但要求该JAR是系统中自带的

    当maven依赖本地而非repository中的jar包,sytemPath指明本地jar包路径

  <dependency>
      <groupId>com.oracle</groupId>
      <artifactId>ojdbc7</artifactId>
      <version>12.0.1</version>
      <scope>system</scope> 
    <systemPath>${project.basedir}/src/main/resources/lib/ojdbc7.jar</systemPath>
 </dependency>
  • import:继承父POM文件中用dependencyManagement配置的依赖,import范围只能在dependencyManagement元素中使用(为了解决多继承)

7. 打包

直接在父工程里面配置mave打包插件即可,子工程不需要配置,但是子工程需要指定生成jar包的名字

  • 父工程里面

    <build>
        <finalName>wql-maven</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
  • 子工程里面
 <build>
        <finalName>wql-maven-admin</finalName>
    </build>

看自己搭配哈,用法很多种,打包的时候,可以通过父工程一键打包即可;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Alan0517

感谢您的鼓励与支持!

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

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

打赏作者

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

抵扣说明:

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

余额充值