
从源代码建立一个软件包有许多连续的步骤。源代码不能独立存在。它需要依赖性、编译、测试和其他过程来转换为软件包。这个最终的软件包会被其他软件包或用户所消耗。
创建一个包的步骤
- 从仓库(如mvn仓库)下载依赖项
- 编译代码
- 单元测试
- 把它做成一个包(war、jar或zip)。
- 集成测试
- 将软件包推送到资源库或服务器。
为了实现上述所有步骤的自动化并将代码转化为软件包,我们可以使用Maven。
Maven
Maven是一种软件的构建工具。这是一个通用工具,可用于所有语言。一个项目的构建会产生一个包。包也被称为工件、捆绑物或模块。
Maven文件夹结构
在maven项目中,默认的文件夹结构将源代码和测试代码分开。在src/main中,所有源代码都被写入。在src/test中,所有测试代码(如单元测试和集成测试)都被写入。

Maven文件夹结构
POM.xml样本
Pom.xml定义了创建软件包的各种步骤,开发者可以用它来配置构建步骤。
<?xml version="1.0" encoding="UTF-8"?>
groupId、artifactId和版本用于唯一地识别项目。GroupId是唯一的组名,以方便识别项目。ArtifactId是项目的名称。版本跟随着semver。版本中的SNAPSHOT表示该版本正在开发中。
在 x.y.z 版本中,x表示主要变化,在没有向后兼容的情况下,y表示功能更新,z表示错误修复。
生命周期、阶段、插件和目标
maven的生命周期包括
- 清理(清除目标文件夹)。
- 默认(构建)和
- site(文档)。
其中,默认生命周期最为突出。这些是构建生命周期的各个阶段。
- 验证
- 编译
- 测试(单元测试
- 打包
- 验证 (集成测试)
- 安装 (推送到本地仓库)
- 部署
每个阶段都有目标。这些目标和阶段是由插件 定义的**。** 下面这个插件有部署阶段和部署目标。

maven-depoly-plugin
这些是一个示例项目的默认插件、阶段和目标。

mvn fr.jcgay.maven.plugins:buildplan-maven-plugin:list
当我们添加自己的插件时,它将被添加在默认插件之上。我已经添加了spring-boot-maven-plugin。
<build>

依赖关系
我们的软件项目所依赖的人工制品被称为依赖项。其中一些工件被放置在最终包中,另一些工件仅用于测试目的。
<dependency>
MVN的继承性
maven POM可以通过将其他POM作为父POM,从其他POM继承其插件、属性。这是管理POM的一种有效方式。
<parent>
MVN命令
maven的目标可以通过mvn命令执行。运行目标将包括之前的目标。例如,运行deploy将运行它之前的所有其他目标,如编译、测试和打包、安装。如果其中任何一个步骤失败,构建过程就会产生报告。
mvn help:effective-pom (Includes inherited pom from parent)
Maven,四季皆宜的构建工具》最初发表在《Nerd For Tech》杂志上,人们通过强调和回应这个故事来继续对话。