Maven是一个Java项目管理和构建工具,它可以定义项目结构、项目依赖,并使用统一的方式进行自动化构建,是Java项目不可缺少的工具。

依赖管理

  1. Maven的第一个作用就是解决依赖管理。当我们声明了abc的依赖时,Maven自动把abcxyz都加入了我们的项目依赖,不需要我们自己去研究abc是否需要依赖xyz
  2. 依赖关系 | scope | 说明 | 示例 | | :—- | :—- | :—- | | compile | 编译时需要用到该jar包(默认) | commons-logging | | test | 编译Test时需要用到该jar包 | junit | | runtime | 编译时不需要,但运行时需要用到 | mysql | | provided | 编译时需要用到,但运行时由JDK或某个服务器提供 | servlet-api |

  3. Maven如何知道从何处下载所需的依赖?也就是相关的jar包?答案是Maven维护了一个中央仓库,所有第三方库将自身的jar以及相关信息上传至中央仓库,Maven就可以从中央仓库把所需依赖下载到本地。

  4. 唯一ID

对于某个依赖,Maven只需要3个变量即可唯一确定某个jar包:

  • groupId:属于组织的名称,类似Java的包名;
  • artifactId:该jar包自身的名称,类似Java的类名;
  • version:该jar包的版本。

注:只有以-SNAPSHOT结尾的版本号会被Maven视为开发版本,开发版本每次都会重复下载,这种SNAPSHOT版本只能用于内部私有的Maven repo,公开发布的版本不允许出现SNAPSHOT。

  1. Maven镜像

中国区用户可以使用阿里云提供的Maven镜像仓库。使用Maven镜像仓库需要一个配置,在用户主目录下进入.m2目录,创建一个settings.xml配置文件,内容如下:

  1. <settings>
  2. <mirrors>
  3. <mirror>
  4. <id>aliyun</id>
  5. <name>aliyun</name>
  6. <mirrorOf>central</mirrorOf>
  7. <!-- 国内推荐阿里云的Maven镜像 -->
  8. <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
  9. </mirror>
  10. </mirrors>
  11. </settings>
  1. 搜索第三方组件

通过search.maven.org搜索关键字,找到对应的组件后,直接复制即可

  1. 命令行编译

在命令中,进入到pom.xml所在目录,输入以下命令:

$ mvn clean package

即可在target目录下获得编译后自动打包的jar。

构建流程

  1. Maven通过lifecycle、phase和goal来提供标准的构建流程。
  2. lifecycle相当于Java的package,它包含一个或多个phase;phase相当于Java的class,它包含一个或多个goal;goal相当于class的method,它其实才是真正干活的。
  3. 大多数情况,我们只要指定phase,就默认执行这些phase默认绑定的goal,只有少数情况,我们可以直接指定运行一个goal,例如,启动Tomcat服务器:

    mvn tomcat:run
    
  4. 在实际开发过程中,经常使用的命令有:

mvn clean:清理所有生成的class和jar;
mvn clean compile:先清理,再执行到compile
mvn clean test:先清理,再执行到test,因为执行test前必须执行compile,所以这里不必指定compile
mvn clean package:先清理,再执行到package

  1. 执行一个phase又会触发一个或多个goal: | 执行的Phase | 对应执行的Goal | | :—- | :—- | | compile | compiler:compile | | test | compiler:testCompile
    surefire:test |