Skip to content

工程构建

GAVP

Maven 中的 GAVP 是指 GroupID、ArtifactID、Version 和 Packaging(可选)属性构成,主要是为每个项目在 Maven 仓库中做一个标识,方便后期项目之间引用依赖。

GAVP 遵循的规则:

  • GroupID 格式:com.{公司/BU}.业务线.[子业务线],最多 4 级。

    说明:{公司/BU},例如:alibaba/taobao、alibaba/tmall、alibaba/aliexpress 等 BU 一级;

    正例:com.taobao.tddl / com.alibaba.sourcing.multilang

  • ArtifactID 格式:产品线名-模块名。语义不重复不遗漏,先到仓库中心查证一下。

    正例:tc-client / uic-api / tair-tool / bookstore

  • Version 版本号格式推荐:主版本号.次版本号.修订号

    • 主版本号:当做了不兼容的 API 修改,或者增加了能改变产品方向的新功能;
    • 次版本号:当做了向下兼容的功能性新增(新增类、接口等);
    • 修订好:修复 bug,没有修改方法签名的功能加强,保持 API 兼容;
  • Packaging 规则:指示将项目打包为什么类型的文件。

    • packaging 属性为 jar(默认值),代表普通的 Java 工程,打包后是 .jar 结尾的文件;
    • packaging 属性为 war,代表 Java web 工程,打包后是 .war 结尾的文件;
    • packaging 属性为 pom,代表不会打包,用来做继承的父工程;

目录结构

下面是 Maven web 程序的标准目录结构:

maven_web/
|-- pom.xml    												# Maven 项目的核心配置文件,用于管理项目依赖、构建配置等
|-- src/                              # 源代码和资源文件目录
|   |-- main/                         # 项目的主要代码和资源
|   |   |-- java/                     # Java 源代码目录
|   |   |   |-- com/example/myapp/    # 项目的包结构,通常以公司域名反转命名
|   |   |   |   |-- controller/       # 控制器层代码,处理 HTTP 请求和响应
|   |   |   |   |-- service/          # 服务层代码,包含业务逻辑
|   |   |   |   |-- dao/              # 数据访问层代码,负责与数据库交互
|   |   |   |   |-- model/            # 数据模型目录,存放实体类
|   |   |-- resources/                # 资源文件目录,存放配置文件、静态资源等
|   |   |   |-- log4j.properties      # Log4j 日志配置文件
|   |   |   |-- spring-mybatis.xml    # Spring 和 MyBatis 的集成配置文件
|   |   |   |-- static/               # 静态资源目录
|   |   |   |   |-- css/              # CSS 样式文件目录
|   |   |   |   |-- js/               # JavaScript 脚本文件目录
|   |   |   |   |-- images/           # 图片资源目录
|   |   |-- webapp/                   # Web 应用程序目录,存放 Web 相关文件
|   |   |   |-- WEB-INF/              # Web 应用的配置目录,包含受保护的资源
|   |   |   |   |-- web.xml           # Web 应用的部署描述文件,配置 Servlet、过滤器等
|   |   |   |   |-- classes/          # 编译后的 class 文件目录(通常由构建工具自动生成)
|   |   |   |-- index.html            # Web 应用的入口页面
|   |-- test/                         # 测试代码目录
|   |   |-- java/                     # 测试用的 Java 源代码目录
|   |   |-- resources/                # 测试用的资源文件目录

项目构建

项目构建是指将源代码依赖库资源文件等转换为可执行或可部署的应用程序的过程。在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。

Maven项目构建流程

命令构建

在项目的 pom.xml 所在文件夹下,打开 cmd 窗口,输入下列命令,进行项目构建:

命令描述
mvn compile编译项目,生成 target 文件夹
mvn package打包项目,生成 jar / war 包
mvn clean清理编译或者打包后的项目结构
mvn install打包后上传到 Maven 本地仓库
mvn deploy只打包,上传到 Maven 私服仓库
mvn site生成站点
mvn test执行测试源码

mvn install 作用?

当我们有 A 项目需要依赖 B 项目时,就需要通过 mvn install 将 B 项目打包并上传到 Maven 本地仓库,然后 A 项目才能够正常引用。

  1. 将 B 项目通过 mvn install 进行打包上传本地参考;
  2. 在 A 项目中 pom.xml 中,通过引用 B 项目的坐标信息,进行引用依赖;
xml
<?xml version="1.0" encoding="UTF-8"?>
<!--suppress ALL -->
<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>

  <!-- Maven工程的坐标 -->
  <groupId>com.geomind.maven</groupId>
  <artifactId>maven_java</artifactId>
  <version>1.0-SNAPSHOT</version>

  <!-- Maven工程的打包方式,默认是jar包 -->
  <packaging>jar</packaging>

  <properties>
    <maven.compiler.source>22</maven.compiler.source>
    <maven.compiler.target>22</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
</project>
xml
<?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>com.geomind.maven</groupId>
  <artifactId>maven_web</artifactId>
  <version>1.0-SNAPSHOT</version>

  <packaging>war</packaging>

  <dependencies>
    <!-- 通过 maven_java 项目的坐标,将其引入当前项目 -->
    <dependency>
      <groupId>com.geomind.maven</groupId>
      <artifactId>maven_java</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>
  </dependencies>

  <properties>
    <maven.compiler.source>22</maven.compiler.source>
    <maven.compiler.target>22</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

</project>

依赖管理

依赖版本提取

当我们有多个包需要版本一致时,就可以适用依赖版本统一提取的方式,在 properties 中提取,在 dependency 中通过 ${} 统一使用。

xml
<properties>
  <maven.compiler.source>22</maven.compiler.source>
  <maven.compiler.target>22</maven.compiler.target>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

  <!-- 名称可以自定义,这样可以统一管理 spring 相关的包版本 -->
  <spring.version>6.2.3</spring.version>
</properties>

<dependencies>
  <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${spring.version}</version>
  </dependency>
  <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${spring.version}</version>
  </dependency>
  <!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>${spring.version}</version>
  </dependency>
</dependencies>

Released under the MIT License.