Maven

Apache Maven,是一个软件(特别是Java软件)项目管理及自动构建工具,由Apache软件基金会所提供。基于项目对象模型(缩写:POM)概念,Maven能管理一个项目的构建、报告和文档等步骤。

特点

  • 项目设置遵循统一的规则
  • 依赖管理,实现自动更新,解决了传统项目依赖管理方式下手动查找更新依赖资源的弊端。
  • 并行构建,编译速度较快
  • 可以与Git等源码系统集成,实现发布管理
  • 向后兼容
  • 可扩展性好,可以使用插件丰富功能

功能

  • 构建
  • 文档生成
  • 报告
  • 依赖管理
  • SCMs
  • 发布
  • 分发
  • 邮件列表

项目目录结构约定

目录 用途
${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是工程对象模型,包含了工程级的各种配置的信息。采用xml文件格式存储。放置于工程的根目录下,文件命名为pom.xml。每个工程都有且仅有一个pom文件。

配置内容

一个pom文件中,可以包含如下配置内容:

  • project dependencies
  • plugins
  • goals
  • build profiles
  • project version
  • developers
  • mailing list

唯一标识

pom文件已project节点作为根节点,节点中拥有如下三个必不可少的子节点,用于唯一标识一个项目:

  • groupId:项目组织的ID;
  • artifactId:项目名称;
  • version:项目版本号,用于区分不同的项目版本。

生命周期

maven中有三种标准的生命周期:clean、build(default)、site。

clean

clean 生命周期由以下三个阶段组成:

  • pre-clean
  • clean
  • post-clean
    clean生命周期负责完成项目的编译、构建结果。

default(build)

default是maven的主要生命周期,用于完成项目的构建。由23个阶段组成:

  • validate 验证项目是否正确,并且所有必要的信息可用于完成构建过程
  • initialize 建立初始化状态,例如设置属性
  • generate-sources 产生任何的源代码包含在编译阶段
  • process-sources 处理源代码,例如,过滤器值
  • generate-resources 包含在包中产生的资源
  • process-resources 复制和处理资源到目标目录,准备打包阶段
  • compile 编译该项目的源代码
  • process-classes 从编译生成的文件提交处理,例如:Java类的字节码增强/优化
  • generate-test-sources 生成任何测试的源代码包含在编译阶段
  • process-test-sources 处理测试源代码,例如,过滤器任何值
  • test-compile 编译测试源代码到测试目标目录
  • process-test-classes 处理测试代码文件编译生成的文件
  • test 运行测试使用合适的单元测试框架(JUnit)
  • prepare-package 执行必要的任何操作的实际打包之前准备一个包
  • package 提取编译后的代码,并在其分发格式打包,如JAR,WAR或EAR文件
  • pre-integration-test 完成执行集成测试之前所需操作。例如,设置所需的环境
  • integration-test 处理并在必要时部署软件包到集成测试可以运行的环境
  • pre-integration-test 完成集成测试已全部执行后所需操作。例如,清理环境
  • verify 运行任何检查,验证包是有效的,符合质量审核规定
  • install 将包安装到本地存储库,它可以用作当地其他项目的依赖
  • deploy 复制最终的包到远程仓库与其他开发者和项目共享
    注意:如果如果采用命令调用阶段,只有到达并包含某个阶段,某个阶段才会执行,否则不执行。

site

site生命周期通常用于创建新的文档,创建报告,部署网站等。包含四个阶段:

  • pre-site
  • site
  • post-site
  • site-deploy

maven仓库

三种Maven仓库

  • local 本地库 :存储于计算机本地的一个目录,默认情况下创建在 %USER_HOME% 目录,可以通过修改maven的settings.xml文件中的localRepository属性来修改本地库的位置。maven构建项目时,会自动将项目依赖的资源(jar包等)下载到该目录中,便于在离线状态下使用。
  • central 中央库 :由Maven社区提供的资源库。它包含了大量的常用程序库。不需要自行配置该仓库,需要在线使用。
  • remote 远程库:自定义库包含所需的库文件或其他项目 jar 文件。用于开发者对于项目的一些私有依赖资源的补充。

依赖搜索序列

当我们执行 Maven 构建命令,Maven 依赖库按以下顺序进行搜索:

  1. 搜索依赖本地资源库,如果没有找到,跳到第2步,否则,如果找到那么会做进一步处理。
  2. 搜索依赖中央存储库,如果没有找到,则从远程资源库/存储库中,然后移动到步骤4,否则如果找到,那么它下载到本地存储库中,以备将来参考使用。
  3. 如果没有提到远程仓库,Maven 则会停止处理并抛出错误(找不到依赖库)。
  4. 远程仓库或储存库中的搜索依赖,如果找到它会下载到本地资源库以供将来参考使用,否则 Maven 停止处理并抛出错误(找不到依赖库)。

常用命令

  • mvn archetype:generate -DgroupId=<包名/项目组名称> -DartifactId=<项目名称> -DarchetypeArtifactId=<模板名>:创建项目;
  • mvn eclipse:eclipse:将普通mvn项目转换为eclipse支持的项目;
  • mvn clean:清理项目缓存的输出;
  • mvn compile:编译项目;
  • mvn package:打包;
  • mvn build:构建项目;
  • mvn test:运行单元测试;
  • mvn install:构建并部署到本地资源库;

你可能感兴趣的:(Maven)