一、maven是什么

1.Maven 翻译为"专家"、“内行”,是 Apache 下的一个纯 Java 开发的开源项目。 Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。Maven 也可被用于构建和管理各种项目,例如 C#,Ruby,Scala 和其他语言编写的项目。

2.约定配置:maven基于项目固定的结构文件名使其能够很好地实现跨平台的使用。

当你需要使用第三方类的时候,总要告诉JVM这些所需的第三方类库,并且能够解决包冲突问题

3.约定:

约定结构
< groupID> 组织
< artifactID> 功能
< version> 版本
< scope> 作用域 |
test(仅测试有效)/compile(test和main都有效)/provided(只在编译时有效,运行时无效)
< optimal> 可选

4.仓库:

中央仓库:按照第3点中约定存储包地址一地址二

本地仓库:下载第三方包在此缓存(~/.m2)

二、包冲突以及解决办法

1.包冲突: 一般出现以下异常:

AbstractMethodError/NoClassDefFoundError/ClassNotFoundException/LinkageError

2.maven的默认解决办法:

maven绝对不允许最终的classpath中出现同名不同版本的jar包~

默认解决包冲突的原则是:最近的胜出

3.有时maven默认的包冲突解决原则并不能很好实现自己想要的功能,并且冲突有时并不能解决, 需要人手动排除,有两个方式:

强行在pom.xml中手动添加所需版本的依赖,覆盖掉之后的子依赖.

直接告诉maven排除某个特定的传递性依赖,如下代码:

```xml
<exlusions>
    <exclusion> 
        <groupID>
        <artifactID>
    <exclusion>
<exlusions>
```

三、maven的进阶功能————自动化构建工具

四、坐标和依赖、生命周期、聚合和继承、仓库等功能待以后扩展