Maven的功能
1 依赖的管理:仅仅通过jar包的几个属性,就能确定唯一的jar包,在指定的文件pom.xml中,只要写入这些依赖属性,就会自动下载并管理jar包。
2 项目的构建:内置很多的插件与生命周期,支持多种任务,比如校验、编译、测试、打包、部署、发布...
3 项目的知识管理:管理项目相关的其他内容,比如开发者信息,版本等等
Maven规定的目录结构
![f9e9bab15a0f845333c3eb5154a18049.png](https://i-blog.csdnimg.cn/blog_migrate/3940dbe214e0baf48525dbfffcc4352b.jpeg)
Maven包下载
Maven项目时,首先检查pom.xml文件以确定依赖包的下载位置,执行顺序如下:
![1dd5a5a509bcb44f63937c21a6ff3ac5.png](https://i-blog.csdnimg.cn/blog_migrate/43df3c80bcec6ef69edc66eb667c5772.jpeg)
![2a302bf8b6694520d29f735c5fbbed15.png](https://i-blog.csdnimg.cn/blog_migrate/d5d03ea50e0235858b4b87760cf599be.jpeg)
1、从本地资源库中查找并获得依赖包,如果没有,执行第2步。
2、从Maven默认中央仓库中查找并获得依赖包(http://repo1.maven.org/maven2/),如果没有,执行第3步。
3、如果在pom.xml中定义了自定义的远程仓库,那么也会在这里的仓库中进行查找并获得依赖包,如果都没有找到,那么Maven就会抛出异常。
Maven命令
![913f9c4082736cd1cd658312266a1d78.png](https://i-blog.csdnimg.cn/blog_migrate/41de6114c7a7f643f53a0f3e93679887.jpeg)
maven项目的完整生命周期
编译:mvn compile --src/main/java目录java源码编译生成class (target目录下)
测试:mvn test --src/test/java 目录编译
清理:mvn clean --删除target目录,也就是将class文件等删除
打包:mvn package --生成压缩文件:java项目#jar包;web项目#war包,也是放在target目录下
安装:mvn install --将压缩文件(jar或者war)上传到本地仓库
部署|发布:mvn deploy --将压缩文件上传私服
dependency下的属性配置
groupId、artifactId、version是依赖的基本坐标,缺一不可。groupId:所需Jar包的项目名;artifactId:所需Jar包的模块名;version:所需Jar包的版本号。
type:依赖的类型,比如是jar包还是war包等,默认为jar。pom.lastUpdated:lastUpdated的意思是表示使用更新描述信息,占位符作用,通俗点讲,选择该类型,jar包不会被加载进来。
optional:标记依赖是否可选。默认值false
exclusions:排除传递依赖,解决jar冲突问题。
scope:依赖范围,意思就是通过pom.xml加载进来的jar包,来什么范围内使用生效,范围包括编译时,运行时,测试时。
- compile :默认范围,用于编译 - provided:类似于编译,但支持你期待jdk或者容器提供,类似于classpath (例如:servlet-api、jsp-api等) - runtime: 在运行时需要使用 (例如:JDBC驱动。JDBC驱动,在编译时(也就是我们写代码的时候都是采用接口编程,压根就没使用到JDBC驱动包内任何东西,只有在运行时才用的到,所以这个是典型的使用runtime这个值的例子),此处不写也不报错) - test: 用于test任务时使用 - system: 需要外在提供相应的元素。通过systemPath来取得 (表示我们自己手动加入的jar包,不属于maven仓库(本地,第三方等),属于别得类库的这样的jar包,只在编译和测试期生效,运行时无效。一般不用)
![1b3f938c15ad6e00197e36e8c106c709.png](https://i-blog.csdnimg.cn/blog_migrate/ee686af5e97825844128c08cf51d261d.jpeg)
scope
依赖调节原则
1、第一原则:路径近者优先原则
2、第一声明者优先原则。就是如果路径相同,maven 默认配置在前面的优先使用
继承
在聚合多个项目时,如果这些被聚合的项目中需要引入相同的Jar,那么可以将这些Jar写入父pom中,各个子项目继承该pom即可。
4.0.0cn.missbe.websearch-resourceswar1.0-SNAPSHOTsearch-resourceshttp://www.missbe.cnA maven project to study maven.............banseon-repository-proxybanseon-repository-proxyhttp://192.168.1.169:9999/repository/default......org.apache.mavenmaven-artifact3.8.1jartestspring-coreorg.springframeworktrue......banseon-maven2banseon maven2file://${basedir}/target/deploybanseon-maven2Banseon-maven2 Snapshot Repositoryscp://svn.baidu.com/banseon:/usr/local/maven-snapshotbanseon-sitebusiness api websitescp://svn.baidu.com/banseon:/var/www/localhost/banseon-web