1、Maven安装

1、安装Mac版本

(1)下载包

访问官网:https://maven.apache.org/download.cgi
image.png
(2)解压缩文件,并且存放一个你自己喜欢的地方,我存在了自己一个喜欢的目录
image.png
(3)配置环境变量(配置在自己用户名下)

  1. vim ~/.bash_profile

(4)追加环境配置,并且保存,按ESC再输入:wq

#配置maven环境
export MABEN_HOME="/Users/djy/WorkFile/apache-maven-3.8.1"
export M2_HOME="/Users/djy/WorkFile/apache-maven-3.8.1"
export PATH="$PATH:$MAVEN/bin"

(5)查看maven版本

djydeMacBook-Pro:~ DD$ mvn -v
Apache Maven 3.8.1 (05c21c65bdfed0f71a2f2ada8b84da59348c4c5d)
Maven home: /Users/djy/WorkFile/apache-maven-3.8.1
Java version: 1.8.0_111, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "mac os x", version: "10.16", arch: "x86_64", family: "mac"
djydeMacBook-Pro:~ DD$

2、maven结构

1、目录结构

image.png

  • src:源码
  • pom.xml:maven的核心配置文件
  • main目录:存放主程序
  • test目录:存放测试程序
  • java目录:存放Java源文件
  • resources目录:存放框架或其他工具的配置文件

    2、pom.xml文件

    ```xml <?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">
    
    4.0.0

    com.daijunyi ssm-03 1.0-SNAPSHOT

    war org.springframework spring-webmvc 5.3.9


<a name="lR2nG"></a>
# 3、相关命令
```shell
mvn compile #编译
mvn package #打包
mvn test #测试
mvn clean #清理

4、仓库

1、分类

  • 本地仓库
    • 当前电脑上部署的仓库目录,为当前电脑上所有Maven工程服务
  • 远程仓库

    • 局域网(私服)
      • 搭建在局域网环境中,为局域网范围内的所有Maven工程服务
    • 中央仓库
      • 假设在Internet上,为全世界所有Maven工程服务
    • 中央仓库镜像
      • 为了分担中央仓库的流量,提升用户访问速度

        2、仓库位置

        1、默认仓库位置

  • Maven缺省的本地仓库路径为${user.home}/.m2/repository

    2、自定义修改仓库位置:

  • 可改变默认的 .m2 目录下的默认本地存储库文件夹

  • 通过修改${user.home}/.m2/settings.xml 配置本地仓库路径 ,
  • 没有settings这个xml文件就新建,或者如下复制个;具体看图:
  • settings.xml文件可以到安装的maven/conf/下复制

image.png

  • 具体就是修改settings.xml里面的标签

    <settings>   
    <localRepository>自己仓库的存放目录,我的仓库已经移动到e盘了,具体看上面的那个图的箭头所指的位置</localRepository>   
    </settings>
    

    image.png

    3、仓库中保存的内容:Maven工程

  • Maven自身所需要的插件

  • 第三方框架或工具的jar包
  • 我们自己开发的Maven工程

5、依赖

1、依赖范围

  • compile范围依赖
    • main主程序可见
    • test测试程序也可见
    • 要进行打包
  • test范围依赖
    • 对main主程序不可见
    • 对test测试程序可见
    • 不参与打包
    • 例子:junit
  • provided范围依赖
    • 就开发阶段依赖
    • 打包不需要参与,因为在运行环境可能会带
    • 例子:servlet-api
  • runtime
    • runtime 依赖在 编译时不需要,在 测试、运行、打包时需要。
    • 例如:jdbc 驱动包,由于运行时需要,所以 runtime 范围的依赖会被打包。
  • system
    • system 范围依赖 与 provided 类似,但必须显式提供一个对于本地系统中 jar 文本的路径,需要指定 systemPath 磁盘路径,system 依赖不推荐使用

image.png

  • 小结:
    • 默认引入 的 jar 包 ———- compile 【默认范围 可以不写】(编译、测试、运行 都有效 )
    • servlet-api 、jsp-api ———- provided (编译、测试 有效, 运行时无效 防止和 tomcat 下 jar 冲突)
    • jdbc 驱动 jar 包 —— runtime (测试、运行 有效 )
    • junit ——- test (测试有效)
  • 依赖范围由强到弱的顺序是:compile>provided>runtime>test

    6、Maven中的DependencyManagement和Dependencies

  • dependencyManagement

    • Maven 使用dependencyManagement 元素来提供了一种管理依赖版本号的方式。
    • 通常会在一个组织或者项目的最顶层的父POM 中看到dependencyManagement 元素。
    • 使用pom.xml 中的dependencyManagement 元素能让所有在子项目中引用一个依赖而不用显式的列出版本号。 Maven 会沿着父子层次向上走,直到找到一个拥有dependencyManagement 元素的项目,然后它就会使用这个 dependencyManagement 元素中指定的版本号。

image.png
image.png
这样做的好处就是:如果有多个子项目都引用同一样依赖,则可以避免在每个使用的子项目里都声明一个版本号,这样当想升级或切换到另一个版本时,只需要在顶层父容器里更新,而不需要一个一个子项目的修改;另外如果某个子项目需要另外的一个版本,只需要声明version就可。

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

    7、开发环境配置

    1、配置阿里云镜像

    文档:https://developer.aliyun.com/mirror/maven ```xml aliyunmaven * 阿里云公共仓库 https://maven.aliyun.com/repository/public
<a name="yfedv"></a>
## 2、配置jdk1.8
```xml
<!-- 全局jdk配置,settings.xml -->  
<profile>    
     <id>jdk1.8</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>