Maven 是一个项目管理和整合工具。Maven 为开发者提供了一套完整的构建生命周期框架。开发团队几乎不用花多少时间就能够自动完成工程的基础构建配置,因为 Maven 使用了一个标准的目录结构和一个默认的构建生命周期。在有多个开发团队环境的情况下,Maven 能够在很短的时间内使得每项工作都按照标准进行。因为大部分的工程配置操作都非常简单并且可复用,在创建报告、检查、构建和测试自动配置时,Maven可以让开发者的工作变得更简单。

安装maven

  1. 解压Maven,解压缩后的⽬录结构如下:

    bin⽬录:存放的是可执⾏命令。

    conf⽬录:存放Maven的配置⽂件。 settings.xml 配置⽂件后期需要修改。

    lib⽬录:存放Maven依赖的jar包。Maven也是使⽤java开发的,所以它也依赖其他的jar包。

  2. 配置环境变量 MAVEN_HOME 为安装路径的bin⽬录

    maven环境变量配置

  3. 检查是否配置成功

    mvn-v

    如果Maven出现JVM内存不足的情况,设置MAVEN_OPTS环境变量-Xms128m -Xmx512mJVM内存过小的问题解决JAVA_OPTS-Xms256m -Xmx1024m

配置

  • 配置本地仓库:

    在pom.xml配置需要下载的依赖时,Maven会自动添加相应的jar包:而这个jar包会先在本地仓库中查找,如果本地仓库中找不到,则会去Maven中央仓库去进行下载,并下载的本地仓库,进行引用。

    配置的方法是修改 conf/settings.xml 中的 <1ocalRepository>为一个指定目录作为本地仓库,用来存储jar包。

    <localRepository>/Users/bruises/software/apache-maven-3.6.1/mvn_resp</localRepository>
    
  • 配置私服

    中央仓库在国外,所以下载jar包速度可能比较慢,而阿里公司提供了一个远程仓库,里面基本也都有开源项目的jar包。 修改 conf/settings.xml 中的 标签,为其添加如下子标签:

    <mirror>  
        <id>alimaven</id>  
        <name>aliyun maven</name>  
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <mirrorOf>central</mirrorOf>          
    </mirror>
    
  • 配置JDK编译版本

    Mavan默认的编译版本是JDK1.5,为了避免每次在项目中进行手动配置,这里修改conf/settings.xml 中的内容如下:

    <profile>   
        <id>jdk8</id>   
        <activation>   
            <activeByDefault>true</activeByDefault>   
            <jdk>1.8</jdk>   
        </activation>   
        <properties>   
            <maven.compiler.source>1.8</maven.compiler.source>   
            <maven.compiler.target>1.8</maven.compiler.target>   
            <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>   
        </properties>   
    </profile>
    

Maven的生命周期

Maven 构建项目生命周期描述的是一次构建过程经历经历了多少个事件,Maven 对项目构建的生命周期划分为3套:

  • clean :清理工作。
  • default :核心工作,例如编译,测试,打包,安装等。
  • site : 产生报告,发布站点等。

同一套生命周期内,执行后边的命令,前面的所有命令会自动执行。

Maven坐标

Maven 中的坐标是资源的唯一标识,使用坐标来定义项目或引入项目中需要的依赖

Maven 坐标主要组成

  • groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如com.baidu)

  • artifactId:定义当前Maven项目名称(通常是模块名称,例如 order-service、goods-service)

  • version:定义当前项目版本号

  • scope:可以设置对应jar包的作用范围(编译环境、测试环境、运行环境),如果引入坐标不指定 scope 标签时,默认就是 compile 值

    scope取值范围:

    依赖范围 编译classpath 测试classpath 运行classpath 例子
    compile Y Y Y logback
    test - Y - Junit
    provided Y Y - servlet-api
    runtime - Y Y jdbc驱动
    system Y Y - 存储在本地的jar包
    • compile:作用于编译环境、测试环境、运行环境。
    • test:作用于测试环境。典型的就是Junit坐标,使用Junit时,都会将scope指定为该值。
    • provided:作用于编译环境、测试环境。例如 servlet-api ,在使用它时,必须将 scope 设置为该值,不然运行时就会报错。
    • runtime:作用于测试环境、运行环境。jdbc驱动一般将 scope 设置为该值,当然不设置也没有任何问题。

使用坐标引入jar包的步骤:

  • 在项目的 pom.xml 中编写<dependencies> 标签
  • <dependencies> 标签中 使用 <dependency> 引入坐标
  • 定义坐标的 groupId,artifactId,version

具体的坐标可以到 Maven中央仓库 进行搜索