MVN2️⃣项目结构与搭建 & 版本管理规范
1、项目结构
1.1、核心结构(❗)
Maven 提倡约定大于配置,提供了公共的标准目录结构。
- src
- main:源代码
- java
- resources
- test:测试类
- java
- resources
- main:源代码
- pom.xml(基本结构)
- modelVersion:POM 版本。
- GAV 坐标:项目本身作为资源,被其它项目引用时使用。
- packaging:打包方式。
- dependencies:项目引用的资源依赖。
1.2、示例
user 模块引用 goods 模块,打包方式为 jar。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>indi.jaywee</artifactId>
<artifactId>project-user</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>indi.jaywee</groupId>
<artifactId>project-goods</artifactId>
<version>1.1</version>
</dependency>
</dependencies>
</project>
2、构建命令
2.1、说明
- 进入项目根目录对应的命令行(cmd),执行构建命令。
- 可一次执行多个命令,使用空格分隔。
- Maven 构建命令,对应 Maven 工程的生命周期与插件。
2.2、常用命令(❗)
格式:以 mvn 开头,后接功能参数。
-
compile:编译项目源码,生成字节码文件。
-
clean:清理编译结果。
-
test:编译并执行测试源码,生成测试报告。
-
package:将编译后的项目打包。
-
install:将当前打包项目,安装到本地仓库。
# 编译 mvn compile # 清理 mvn clean # 测试 mvn test # 打包 mvn package # 安装 mvn install # 同时执行多个 mvn clean compile
3、项目搭建
3.1、手动
- 根据 Maven 规范,手动创建项目结构。
- 编写 pom.xml、源码等。
- 执行构建命令。
3.2、插件
示例:使用
archetype:generate
插件,基于模板生成 Maven 项目。
格式:mvn archetype:generate,常用参数如下。
-
GAV
-
archetypeArtifactId:模板名称
-
interactiveMode:是否开启交互模式
mvn archetype:generate -DgroupId= \ -DartifactId= \ -Dversion= \ -DarchetypeArtifactId=模板名称 \ -DinteractiveMode= # 其它参数
模板说明
-
常用模板
# Java maven-archetype-quickstart # Web maven-archetype-webapp
-
生成项目结构
- Java 模板:👉 本文 1.1
- Web 模板:相比 Java 模板多了
src\main\webapp
,少了*\resources
。
3.3、IDEA(❗)
3.3.1、版本兼容
IntelliJ IDEA 和 Maven 之间存在版本兼容问题
IDEA 版本 | Maven 版本 |
---|---|
2021 | 3.8.1+ |
2020 | 3.6.3+ |
2018 | 3.6.1+ |
3.3.2、创建 Maven 项目
① 创建项目
-
新建项目:
-
无模板(👍):创建无模板的项目,在项目中导入所需依赖。
-
使用模板:勾选
Create from archetype
,选择需要的模板。
-
-
项目信息:
- 项目名(与 AritifactId 一致)
- 项目存放路径
- GAV 坐标
-
选择 Maven:
-
IDEA 默认使用内置 Bundled Maven、默认配置文件、默认仓库地址。
-
需覆盖为下载的 Maven、配置文件、本地自定义仓库。
-
② 结构说明
-
标记文件夹:如图所示,按功能标注相应文件夹。
-
Maven Projects(❗)
-
刷新:在 pom.xml 中导入依赖后,需要刷新 Maven。
-
生命周期:即👉本文 2 构建命令。
-
插件
-
依赖:当前项目导入的依赖
-
③ 更改 Maven
-
IDEA 内:对当前项目生效。
-
IDEA 启动时:对新建的 Maven 项目默认选择。
3.3.3、创建 Maven 配置(❗)
-
好处:
- 同时执行多个构建命令,简化操作。
- 支持 debug 模式。
-
步骤:Add Configuration - Maven - 填写信息
-
name:配置名称。
-
Working Directory:工作目录,即构建的项目。
-
Command Line:配置的插件命令,多个命令之间用空格分开。
-
3.3.4、自定义插件(❗)
在项目中,除了 Maven 构建命令对应的插件,还可以配置自定义的插件。
示例:配置 web 项目 Tomcat 插件。
-
Maven 仓库:查找 Tomcat Maven 插件的坐标。
-
pom.xml 配置:如下所示,build - plugins - plugin - gav。
-
刷新 Maven,即可在 Maven plugins 看到自定义插件。
<!-- 构建 --> <build> <!-- 插件配置 --> <plugins> <!-- 具体插件 --> <plugin> <!-- GAV --> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> </plugin> </plugins> </build>
4、版本管理规范
为了提高可读性和可维护性,Maven 工程版本的命名也有一定规范。
(👉 类似 Java 命名规范)
4.1、工程版本号约定
- 规范:主版本.次版本.增量版本.里程碑版本
- 主版本:重大架构变更,如 Spring 5.x.x 相对于 Spring 4.x.x
- 次版本:较大功能增加或变更,或全面系统的修复 bug。
- 增量版本:重大 bug 修复
- 里程碑版本:版本内部的里程碑,相比下一个正式版本来说还不太稳定,需待更多测试。
- 示例:Spring 的 5.2.6.RELEASE
4.2、里程碑版本
常用版本
含义 | 说明 | 特点 | |
---|---|---|---|
SNAPSHOT | 快照版 | 项目开发过程中临时输出的版本 | 不稳定,持续更新 |
RELEASE | 发布版 | 项目开发到一定阶段里程碑后,向团队外部发布较稳定的版本 | 稳定,不变更 |
alpha | 内测版 | 不稳定,持续更新 | |
beta | 公测版 | 比 alpha 完善一点 | 不稳定,持续更新 |