【Tools】构建工具 Maven
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,WARmvn install
:安装包至本地 Maven 仓库,以备本地的其它项目作为依赖使用mvn deploy
:复制最终的包至远程仓库,共享给其它开发人员和项目(通常和一次正式的发布相关)
- 站点生命周期:为一个或者一组项目生成项目文档和报告,使用较少。
依赖冲突及解决
每个显式声明的类包都会依赖于一些其它的隐式类包,这些隐式的类包会被maven间接引入进来,因而可能造成一个我们不想要的类包的载入,严重的甚至会引起类包之间的冲突。解决这个问题需要查看 pom.xml 显式和隐式的依赖类包树,找出我们不想要的依赖类包,手工将其排除在外。