1、Maven有哪些优点和缺点
优点:
1、简化项目依赖管理
2、方便与持续集成工具(Jenkins)整合
3、有助于多模块项目开发,比如一个模块开发好后发布到仓库,依赖该模块时可以直接从远程仓库更新,不用自己手动去编译
4、有很多插件,便于扩展,比如:生产站点,自动发布版本
缺点:
1、maven是个庞大的工具,学习成本大
2、maven采用约定大于配置的策略,出现问题很难调试
3、当依赖很多时,m2仓库会使开发工具变卡
2、Maven的生命周期
maven有三大生命周期,分别为:
1、clean 周期:主要用于清理上一次构建产生的文件,可以理解为删除target目录
2、默认周期
主要阶段包含:
1)process-resources 默认处理src/test/resources/下的文件,将其输出到src的classpath目录中
2)compile 编译src/main/java下的java文件,产生对应的class
3)process-test-resources 默认处理src/test/resources/下的文件,将其输出到测试的classpath目录中
4)test-compile 编译src/test/java下的java文件,产生对应的class
5)test 运行测试用例
6)package 打包构件,即生成对应的jar, war等
7)install将构件部署到本地仓库
8)deploy 部署构件到远程仓库
3、site周期
主要阶段包含:
site 产生项目的站点文档
site-deploy 将项目的站点文档部署到服务器
3、Maven常见的依赖范围
- compile :默认范围,用于编译
- provided:类似于编译,但支持你期待jdk或者容器提供,类似于classpath
- runtime: 在执行时需要使用
- test: 用于test任务时使用
- system:需要外在提供相应的元素。通过systemPath来取得
- systemPath: 仅用于范围为system。提供相应的路径
- optional: 当项目自身被依赖时,标注依赖是否传递。用于连续依赖时使用
4、多模块如何聚合
配置一个打包类型为pom的聚合模块,然后在该pom中使用元素声明要聚合的模块
5、多模块项目如何管理项目依赖的版本
通过在父模块中声明dependencyManagement和pluginManagement, 然后让子模块通过元素指定父模块,这样子模块在定义依赖是就可以只定义groupId和artifactId,自动使用父模块的version,这样统一整个项目的依赖的版本
6、如何保证项目传递依赖不会引起版本冲突
使用的元素将会引起冲突的元素排除