@MAVEN项目简介
Maven
1.什么是Maven
Maven 就是一个项目管理构建工具,它包含一个项目对象模型(POM:Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标 (goal)的逻辑。
2、Maven仓库类型
(1)本地仓库 :用来存储从远程仓库或中央仓库下载的插件和 jar 包,项目使用一些插件或 jar 包, 优先从本地仓库查找
(2)远程仓库:如果本地需要插件或者 jar 包,本地仓库没有,默认去远程仓库下载。 远程仓库可以在互联网内也可以在局域网内。
(3)中央仓库 :在 maven 软件中内置一个远程仓库地址 http://repo1.maven.org/maven2 ,它是中 央仓库,服务于整个互联网,它是由 Maven 团队自己维护,里面存储了非常全的 jar 包,它包 含了世界上大部分流行的开源项目构件。
3.maven工程的认识
(1)maven工程的目录结构
(2).Maven常用命令
1.打包:mvn package 将项目打包到target目录下。
2.安装:mvn install 打包到本地仓库。解决本地多个项目共用某个jar包的问题。
3.清除:clean 是 maven 工程的清理命令,执行 clean 会删除 target 目录及内容。
4.单元测试:mvn test 执行src/test/java目录下的单元测试类。
4.Maven中的依赖
4.1.依赖范围
maven 项目在不同的阶段引入到classpath中的依赖是不同的。常用依赖范围有四种:
1.Compile:编译依赖范围,再编译,测试。运行时都需要。比如:log4j(常用日志jar包)
2.test:测试依赖范围:测试时需要,编译运行湿不需要,比如:junit(常用测试jar包)
3. runtime: 运行时依赖范围,测试和运行时需要。编译不需要。 通常情况下,runtime都使用compile替代
比如:jdbc驱动jar包
4. provided:已提供依赖范围,编译和测试时需要。运行时不需要。
比如:servlet-api
1.maven工程要导入jar包的坐标,就必须要考虑解决jar冲突
1)解决jar包冲突的方式一:
第一声明优先原则:哪个jar包的坐标在靠上的位置,这个jar包就是先声明的。先声明的jar包坐标下的依赖包,可以优先进入项目中。
maven导入jar包中的一些概念:
直接依赖:项目中直接导入的jar包,就是该项目的直接依赖包
传递依赖:项目中没有直接导入的jar包,可以通过项目直接依赖jar包传递到项目中去。
2)解决jar包冲突的方式二:
路径近者优先原则。直接依赖路径比传递依赖路径近,那么最终项目进入的jar包会是路径近的直接依赖包。
3)解决jar包冲突的方式三:(推荐使用)
直接排除法:当我们要排除某个jar包下的依赖包,在配置exclusions标签的时候,内部可以不写版本号。因为此时依赖包使用的版本和默认和本jar包一样。
2.pom.xml文件中标签的认识
build标签是在maven中添加插件
dependencyManagement标签是锁定jar包版本(标签下的jar包没有导入jar包的作用 只是锁住的作用)
对于开发A项目者,若是引用了另一个项目B,则B中pom文件中导入的jar包会传递到A项目中,属于传递依赖,对于A项目开发者若直接导入B项目中导入的jar包 ,对于A来说,这是直接依赖,
那么直接依赖的jar包就会把我们B项目中传递过去的jar包覆盖掉,
为了防止该种情况出现,可以把B项目中主要的jar包锁住,那么其他依赖该项目的项目中。即使有同名jar包直接依赖,也无法覆盖。
统一管理jar包的版本
学习借鉴: https://www.cnblogs.com/nje19951205/p/17151659.html