1. 参考文章
https://blog.csdn.net/ado1986/article/details/39547839
https://juejin.im/post/5a4a5e2bf265da4322418d7f#heading-22
2. 什么是maven
Maven作为一个构建工具,依赖管理工具和项目管理工具,他提供了中央仓库,能帮我们自动下载构件。
现在maven版本用的是3.5.4
3. maven常用命令
- clean: 清理target
- test:测试
- compile:编译
- package:编译、打包
- install:编译、打包、打包到本地仓库,方便供其他人调用
- deploy:发布
4. 依赖的配置
<project>
...
<dependencies>
<dependency>
<groupId>实际项目</groupId>
     <artifactId>模块</artifactId>
     <version>版本</version>
     <type>依赖类型</type>
     <scope>依赖范围</scope>
     <optional>依赖是否可选</optional>
     <!—主要用于排除传递性依赖-->
     <exclusions>
     <exclusion>
        <groupId>…</groupId>
          <artifactId>…</artifactId>
       </exclusion>
     </exclusions>
  </dependency>
<dependencies>
...
</project>
- grounpId、artifactId和version:以来的基本坐标,对于任何一个依赖来说,基本坐标是最重要的,Maven根据坐标才能找到需要的依赖。
- scope:依赖范围,控制依赖和三种classpath(编译classpath,测试classpath、运行classpath)的关系
- compile:默认,编译、测试、运行都有效
- test: 测试依赖范围,比如Jnuit,运行的用不到
- provided: 编译的时候有效,运行无效,如servlet-api
- runtime: 运行时有效。
A、B两个项目,A依赖B,当B中的fastjson的依赖范围scope为compile和runtime的时候,A才会依赖于B中的fastjson jar。
如果A,B都有同样的jar,A依赖B,那么用A自己的jar。
5. 依赖是否可选
- optional:表示依赖是否可选,默认为false把相关都加载进来,如A、B两个项目,如果B中的fastjson使用了optional=true,那么A如果依赖了B,那么B中的fastjson不会传递到A来,默认为false是会传递得。
6. 排序依赖
exclusions属性进行排除,和optional
7. 仓库
- 本地仓库、中央仓库、镜像化