文章目录
POM文件
<?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>
<!-- 必填项 -->
<!-- 项目的组名,一般是翻转的域名,如域名是bk.com -->
<groupId>com.bk</groupId>
<!-- 项目的唯一标识,一般是项目名 -->
<artifactId>bk</artifactId>
<!-- 项目版本号 -->
<version>1.0.0</version>
<!-- 非必填 -->
<!-- 描述项目的名称 -->
<name>book</name>
<!-- 具体的项目描述 -->
<description>图书管理系统</description>
<!-- 用来定义和管理项目中所需要的属性,可以用来管理依赖的版本,方便统一管理,一处修改,多处生效 -->
<properties>
<!-- 定义一个属性bk.version,引用的时候使用${bk.version}来使用 -->
<bk.version>1.0.0</bk.version>
<!-- 定义一个属性spring.boot.version -->
<spring.boot.version>2.7.18</spring.boot.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- 依赖声明 -->
<dependencyManagement>
<dependencies>
<!-- 引入SpringBoot的依赖配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<!-- 使用properties中定义的spring-boot_version -->
<version>${spring.boot.version}</version>
<!-- 依赖的类型,默认是jar,但是在dependencyManagement中,用于管理其他模块的依赖版本,则通常是pom -->
<type>pom</type>
<!-- type为pom的时候,scope为import -->
<scope>import</scope>
<!-- 排除依赖 -->
<exclusions>
<!-- 排除spring-boot-dependencies中的logback-classic依赖 -->
<exclusion>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 引入一个本地依赖 -->
<dependency>
<groupId>com.baiwang.bop</groupId>
<artifactId>sdk-outer</artifactId>
<version>3.4.472</version>
<scope>system</scope>
<!--
${project.basedir}:当前pom所在的模块的路径
当前pom所在的模块的父目录下的lib目录下的com_baiwang_bop_sdk_outer_3_4_483.jar
-->
<systemPath>${project.basedir}/../lib/com_baiwang_bop_sdk_outer_3_4_483.jar</systemPath>
</dependency>
</dependencies>
</dependencyManagement>
<packaging>pom</packaging>
<!-- 引入子模块 -->
<modules>
<module>bk-admin</module>
<module>bk-framework</module>
</modules>
<build>
<plugins>
<!-- 配置Spring Boot Maven插件 -->
<plugin>
<!-- 指定插件的组ID -->
<groupId>org.springframework.boot</groupId>
<!-- 指定插件的Artifact ID -->
<artifactId>spring-boot-maven-plugin</artifactId>
<!-- 配置插件的行为 -->
<configuration>
<!-- 设置是否包含scope为system的第三方Jar包 -->
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
<!-- 插件 -->
<plugin>
<!-- 插件所在的组织或项目组 -->
<groupId>org.apache.maven.plugins</groupId>
<!-- 插件的具体名称 -->
<artifactId>maven-compiler-plugin</artifactId>
<!-- 插件的版本号 -->
<version>3.13.0</version>
<!-- 配置项 -->
<configuration>
<!-- 编译Java源代码时使用DK 21 -->
<release>21</release>
<!-- 指定编码格式 -->
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
<plugin>
<!-- 定义清理插件 -->
<!-- 插件所在的组织或项目组 -->
<groupId>org.apache.maven.plugins</groupId>
<!-- 插件的具体名称 -->
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<!-- filesets: 定义一组文件集合,这些文件或目录将被清理操作影响。 -->
<filesets>
<!-- fileset: 文件集定义,可以包含多个属性来精确控制哪些文件将被处理。 -->
<fileset>
<!-- directory: 指定文件集中的具体目录路径,这里指定了日志目录,意味着该目录下的所有内容都将在执行清理命令时被删除。-->
<directory>logs</directory>
</fileset>
</filesets>
</configuration>
</plugin>
<!-- 配置单元测试的插件 -->
<plugin>
<!-- 指定插件的组ID -->
<groupId>org.apache.maven.plugins</groupId>
<!-- 指定插件的Artifact ID -->
<artifactId>maven-surefire-plugin</artifactId>
<!-- 指定插件的版本号 -->
<version>3.4.0</version>
<!-- 配置插件的行为 -->
<configuration>
<!-- 设置跳过执行单元测试 -->
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
<!-- Maven在构建项目时可以从这个仓库下载依赖库,配置Maven项目的仓库 -->
<repositories>
<repository>
<!-- 仓库的唯一标识符 -->
<id>public</id>
<!-- 仓库名称 -->
<name>aliyun nexus</name>
<!-- 仓库的URL地址 -->
<url>https://maven.aliyun.com/repository/public</url>
<!-- 配置仓库的发布版本 -->
<releases>
<!-- 启用发布版本 -->
<enabled>true</enabled>
</releases>
</repository>
</repositories>
<!-- 配置Maven项目的插件仓库,Maven只会从这个仓库下载发布版本的插件,而不会下载快照版本的插件 -->
<pluginRepositories>
<pluginRepository>
<!-- 仓库的唯一标识符 -->
<id>public</id>
<!-- 仓库名称 -->
<name>aliyun nexus</name>
<!-- 仓库的URL地址 -->
<url>https://maven.aliyun.com/repository/public</url>
<!-- 配置仓库的发布版本 -->
<releases>
<!-- 启用发布版本 -->
<enabled>true</enabled>
</releases>
<!-- 配置仓库的快照版本 -->
<snapshots>
<!-- 禁用快照版本 -->
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</project>
这张图片展示的是 Maven 的构建生命周期中的 标准阶段(Phase)。这些是 Maven 默认的生命周期(default
生命周期)中的关键步骤,执行 mvn <phase>
命令时,会自动执行该阶段之前的所有阶段。
以下是每个阶段的详细解释:
maven命令
1. clean
- 作用:清除上一次构建生成的文件(通常是
target/
目录)。 - 命令:
mvn clean
- 常用于:构建前的清理操作。
2. validate
- 作用:验证项目结构是否正确,所有需要的信息是否可用(如
pom.xml
是否正确,依赖是否存在等)。 - 命令:
mvn validate
3. compile
- 作用:编译项目的主源码(
src/main/java
)。 - 命令:
mvn compile
- 输出目录:
target/classes
4. test
- 作用:编译并运行项目中的测试代码(
src/test/java
),不会打包,也不会部署。 - 命令:
mvn test
- 依赖:必须先成功
compile
5. package
- 作用:将项目打包成可发布的格式,如
.jar
或.war
。 - 命令:
mvn package
- 依赖:自动执行 compile 和 test
6. verify
- 作用:运行任何集成测试,检查包的有效性。
- 命令:
mvn verify
- 例子:可以用于执行集成测试插件(如 failsafe)
7. install
- 作用:将打好的包安装到本地 Maven 仓库(通常是
~/.m2/repository
),以供本地其他项目引用。 - 命令:
mvn install
8. site
- 作用:生成项目站点文档,通常包含 Javadoc、测试报告、依赖列表等。
- 命令:
mvn site
9. deploy
- 作用:将最终打好的包部署到远程 Maven 仓库,以供团队其他成员或生产环境使用,需要配置私有 Maven 仓库(或远程仓库),否则它无法知道要把构建产物部署到哪里
- 命令:
mvn deploy
- 常用于:CI/CD 流程中
- pom.xml 中指定仓库信息
<distributionManagement>
<repository>
<id>my-repo</id>
<url>http://nexus-server/repository/maven-releases/</url>
</repository>
</distributionManagement>
- maven的settings.xml 中配置认证信息
<servers>
<server>
<id>my-repo</id>
<username>username</username>
<password>password</password>
</server>
</servers>
- 如果没有配置远程仓库
会报错:No plugin found for prefix ‘deploy’… 或者 Failed to deploy artifacts: Could not find metadata…
补充说明:
- 生命周期顺序:Maven 按阶段顺序执行。例如执行
mvn install
,会自动执行validate → compile → test → package → verify → install
。 - 组合命令示例:
mvn clean install
是最常用的构建命令,会清理再完整构建。