Maven

作者: WJYUUU | 来源:发表于2018-10-27 14:03 被阅读0次

    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

          本文链接:https://www.haomeiwen.com/subject/wwmozftx.html