- Maven
- Maven是一个项目管理工具
- 依赖管理
- 传统工程中我们直接把jar包放在项目中
- maven工程真正的jar包放在仓库中,项目中只防止jar包的坐标
- 一键构建
- maven自身集成了tomcat插件,可以对项目进行编译、测试、打包、安装、发布等操作
- 仓库的种类
- 本地仓库
- 远程仓库【私服】
- 中央仓库
- 仓库之间的关系
- 当我们启动一个maven工程的时候,maven工程会通过pom文件中jar包的坐标去本地仓库找对应jar包
- 默认情况下,如果本地仓库没有对应jar包,maven工程会自动取中央仓库下载jar包到本地仓库
- 在公司中,如果本地没有jar包,会先从私服下载jar包
- 如果私服没有jar包,可以从中央仓库下载,也可以从本地上传
- maven常见命令
- clean
- compile
- test
- package
- install
- deploy
- maven三套生命周期
- 清理生命周期
- 默认生命周期
- 站点生命周期
- 直接依赖:项目中直接导入的jar包,就是该项目的直接依赖包
- 传递依赖:项目中没有直接导入的jar包,可以通过项目直接依赖jar包传递到项目中
- 解决jar包冲突
- 方式一:第一声明优先原则,哪个jar包的坐标在靠上的位置,这个jar包就是先声明的,先声明的jar包坐标下的依赖包,可以优先进入项目中
- 方式二:路径近者优先原则,直接依赖路径比传递依赖路径近,那么最终项目进入的jar包会是路径近的直接依赖包
- 方式三:直接排除法(推荐):当我们要排除某个jar包下的依赖包,在配置exclusion标签的时候,内部可以不写版本号,因为此时依赖包使用的版本默认和本jar包一样
- 为了防止依赖jar包被覆盖,可以把依赖的主要jar包的坐标用dependencyManagement锁住
- maven解决代码可重用和便于维护的问题上是这么解决的
- maven把一个完整的项目分成不同的独立模块,这些模块都有各自独立的坐标。哪个地方需要其中某个模块,就直接引用该模块的坐标即可
- 如果今后公司开发一个新项目,我们先考虑问题不是dao、service、utils、domain如何编写,我们要考虑的是dao、service、utils、domain这些模块是否已经存在,如果存在直接引用
- 我们可以把拆分零散的模块聚合到一起编写成一个完整的项目,这就是maven聚合的思想
- 一个完整的项目看的是代码,代码完整就可以说是一个完整的项目,跟此项目是工程还是模块没有关系
- 工程天生只能使用自己内部资源,工程是天生独立的,后天可以与其他工程或模块建立关联关系
- 模块天生不是独立的,模块天生是属于父工程的,模块一旦创建,所有父工程的资源都可以使用
- 子模块之间天生是没有任何关系的
- 父子工程之间不用建立关系,继承关系是先天的,不需要手动建立
- 平级之间的引用叫依赖,依赖不是天生的,依赖是需要后天建立的
- 实际开发中,如果依赖传递丢失,表示形式就是jar包的坐标导不进去,我们的做法就是直接再导入一次
- maven父子工程的三种启动方式
- 父工程直接启动
- web模块install后启动
- 本地tomcat启动