maven

约定配置

  maven约定大于配置:
  ${basedir} 存放pom.xml和所有的子目录
  ${basedir}/src/main/java 项目的java源代码
  ${basedir}/src/main/resources 项目的资源,比如property文件,springmvc.xml
  ${basedir}/src/test/java 项目的测试类,比如说Junit代码
  ${basedir}/src/test/resources 测试用的资源
  ${basedir}/src/main/webapp/WEB-INF web应用文件目录,web项目的信息,比如存放web.xml、本地图片、jsp视图页面
  ${basedir}/target 打包输出目录
  ${basedir}/target/classes 编译输出目录
  ${basedir}/target/test-classes 测试编译输出目录
  Test.java Maven只会自动运行符合该命名规则的测试类
  ~/.m2/repository Maven默认的本地仓库目录位置。

pom

pom基本标签简介

  groupId:公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如
  com.companyname.project-group,maven会将该项目打成的jar包放本地路径:/com/companyname/project-group
  artifactId:项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的。
  version:版本号。
  project:工程的根标签。
  modelVersion:模型版本,基本都是4.0

父pom

  所有的pom都要继承一个父pom。父pom声明了一些可被继承的默认设置。maven使用effective pom(父pom+自己工程pom的配置)来执行目标,目的是为了尽可能减少配置。   

maven生命周期

  validate:验证项目是否正确且所有必须信息是可用的。

  compile:执行编译 源代码编译在此阶段完成。

  Test:使用适当的单元测试框架(例如JUnit)运行测试

  package:打包创建JAR/WAR包如在 pom.xml 中定义提及的包

  verify: 检查 对集成测试的结果进行检查,以保证质量达标

  install:安装安装打包的项目到本地仓库,以供其他项目使用

  deploy: 部署 拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程

仓库

  Maven根据坐标寻找构件的时候,它先会查看本地仓库,如果本地仓库存在构件,则直接使用;如果没有,则从远程仓库查找,找到后,下载到本地。

  分类

  本地仓库

  远程仓库:

  中央仓库:默认的远程仓库。maven的setting文件有个父pom,在你安装的maven的lib下的 maven-model-builde-xxx.jar解压,然后不断点击进入,找到super pom里面配置了一个id为central的中央仓库。

  私服:私服是一种特殊的远程Maven仓库,它是架设在局域网内的仓库服务,私服一般被配置为互联网远程仓库的镜像,供局域网内的Maven用户使用。当Maven需要下载构件的时候,先向私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,同时缓存在私服之上,然后为Maven下载请求提供下载服务,另外,对于自定义或第三方的jar可以从本地上传到私服,供局域网内其他maven用户使用。
  profile。

  普通远程仓库。

  每个用户只能有一个本地仓库,和多个远程仓库。

  maven镜像:

  当远程仓库被镜像匹配到,那么获取jar将从镜像仓库获取,而不是我们配置的repository仓库。

  ps:这个镜像,个人觉得,类似于拦截器,用于拦截父pom,以及你项目配置的仓库。拦截后使用,setting文件里面的pom文件。没有匹配到远程仓库的毫无意义。匹配到的则是替换。因此远程仓库和镜像是一个级别。

  获取jar的优先级。

  本地仓库 > 私服 (profile)> 远程仓库(repository)和 镜像 (mirror) > 中央仓库 (central)