Maven 是 Apache 软件基金会下的一款自动化构建工具,专注于服务 Java 平台上的项目构建和依赖管理。

构成
  • 项目对象模型(Project Object Model,POM)
    • 对应 Maven 项目中的 pom.xml 文件,包括项目本身信息、运行所依赖的 jar 包信息、运行环境信息
  • 一组标准集合
  • 项目生命周期(Project Lifecycle)
  • 依赖管理系统(Dependency Management System)
  • 用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑
Maven 坐标

一般 Maven 使用 [groupID, artifactId, version, packaging] 来表示一个项目的某个版本,有时还会使用 classifier 来表示项目的附属构建,常见的附属构建有 javadoc 和 sources 包。

  • groupID:团体标识,约定以创建这个项目的组织名称的逆向域名开头
  • artifactId:项目的唯一标识符
  • version:项目的版本
  • package:项目的类型,默认是 jar,描述了项目打包后的输出
Maven 项目标准目录结构
  • 核心代码:src/main/java
  • 配置文件:src/main/resources
  • 测试代码:src/test/java
  • 测试配置文件:src/test/resources
  • 页面资源及配置:src/main/webapp
Maven 生命周期
  • 清理生命周期
    • mvn clean:删除项目中已经编译好的信息,删除 target 目录
  • 默认生命周期:是一个软件应用程序构建过程的总体模型。
    • mvn compile:Maven 工程的编译命令,用于编译项目的源代码,将 src/main/java 下的文件编译成 class 文件输出到 target 目录下
    • mvn test:单元测试
    • mvn package:将编译好的代码打包成可分发的格式,如 JAR,WAR
    • mvn install:安装包至本地 Maven 仓库,以备本地的其它项目作为依赖使用
    • mvn deploy:复制最终的包至远程仓库,共享给其它开发人员和项目(通常和一次正式的发布相关)
  • 站点生命周期:为一个或者一组项目生成项目文档和报告,使用较少。
依赖冲突及解决

每个显式声明的类包都会依赖于一些其它的隐式类包,这些隐式的类包会被maven间接引入进来,因而可能造成一个我们不想要的类包的载入,严重的甚至会引起类包之间的冲突。解决这个问题需要查看 pom.xml 显式和隐式的依赖类包树,找出我们不想要的依赖类包,手工将其排除在外。

⤧  Next post 【守望先锋】守望先锋联赛OWL ⤧  Previous post 【软件工程】《黑客与画家》书摘