项目结构
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
,代表不会打包,用来做继承的父工程;
- packaging 属性为
<!-- Maven工程的坐标 -->
<groupId>com.geomind.maven</groupId>
<artifactId>maven_java</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- Maven工程的打包方式,默认是jar包 -->
<packaging>jar</packaging>
目录结构
下面是 Maven web 项目的标准目录结构:
myapp/
|-- pom.xml # Maven 项目的核心配置文件,用于管理项目依赖、构建配置等
|-- src # 源代码和资源文件目录
| |-- main # 项目的主要代码和资源
| | |-- java # Java 源代码目录
| | | |-- com.geomind.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 # 测试用的资源文件目录
项目编译/打包
项目构建是指将源代码、依赖库和资源文件等转换为可执行或可部署的应用程序的过程。在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。
使用命令
使用命令构建有两种方式:
- 手动CMD命令行:在项目的 pom.xml 所在文件夹下,打开 cmd 窗口,输入下列命令,进行项目构建;
- IDEA生命周期插件:在 IDEA右侧 M图标的面板,找到对应项目的生命周期,双击执行命令;
命令 | 描述 |
---|---|
mvn clean | 清理编译/打包后的 target 文件夹 |
mvn test | 执行测试源码 |
mvn compile | 编译项目,生成 target 文件夹 |
mvn package | 打包项目,生成 jar/war 包 |
mvn install | 项目打包后上传到 Maven 本地仓库 |
mvn site | 生成站点 |
mvn deploy | 只打包,上传到 Maven 私服仓库 |
mvn install
的作用?
当 A 项目需要依赖 B 项目时,就需要通过 mvn install
将 B 项目打包并上传到 Maven 本地仓库,然后 A 项目才能够正常引用。
- 将 B 项目通过 mvn install 进行打包上传本地仓库;
- 在 A 项目中 pom.xml 中,通过引用 B 项目的坐标信息,进行引用依赖;
<?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_A</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<!-- 在maven_java_A中通过引入maven_java_B项目的坐标,将其引入当前项目 -->
<dependencies>
<dependency>
<groupId>com.geomind.maven</groupId>
<artifactId>maven_java_B</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>
项目配置
默认情况下,项目构建不需要额外配置,Maven 的 pom.xml 都有对应的默认配置。当然,我们也可以在 pom.xml 中定制一些配置,来修改默认构建的配置。
指定打包文件名称
在 pom.xml 的 <build>
标签中,添加 <finalName>
标签,自定义指定构建打包后的文件名称。
<build>
<!-- 打包以后的名称就是自定义的名称了 -->
<finalName>custom-maven_web-1.0-SNAPSHOT</finalName>
</build>
指定打包文件路径
默认情况下,在 src/java 文件夹下添加的 java 类,在 resources 文件夹下添加的项目配置文件,它们都会被打包编译到 target/包名称/classes 文件夹下。
但是,有特殊情况,如果在 java 文件夹下创建配置文件,它会被打包编译到 classes 文件夹下吗?不会的。
应用场景:mybatis 中有时候会将用于编写 SQL 语句的映射文件和 mapper 接口都写在 src/main/java 下的包中,此时映射文件就不会被打包,怎么解决呢?
在 pom.xml 中,增加下面的配置:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<!-- 打包 src/main/java 任意文件夹下的 *.xml 文件 -->
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<!-- 打包 src/main/resources 任意文件夹下的 *.xml 文件 -->
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
配置三方插件
在 <build>
标签下引入插件,以 tomcat7 插件为例:
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8090</port>
<path>/</path>
<uriEncoding>UTF-8</uriEncoding>
<server>tomcat7</server>
</configuration>
</plugin>
</plugins>
</build>
配置完成后,在 Maven 可视化界面中,找到 Plugins -> tomcat7 -> tomcat7:run 命令,将其执行,此时控制台中会出现 localhost:8090
地址,点击即可看到在 webapp 下创建的 index.html 页面。