六:java 基础知识(6)-- Maven项目管理
目录
1. 引言
1.1 什么是 Maven
Maven 是一个强大的项目管理和构建自动化工具,主要用于 Java 项目。它提供了一种标准化的方法来管理项目的构建过程、依赖关系、文档生成等。Maven 的核心是一个配置文件 pom.xml
(Project Object Model),通过这个文件,开发人员可以定义项目的基本信息、依赖库、构建配置以及插件等。
Maven 的主要特点包括:
- 依赖管理:自动下载和管理项目所需的库和框架。
- 项目构建:通过预定义的生命周期和阶段简化构建过程。
- 可扩展性:通过插件机制,可以灵活扩展和定制项目的构建流程。
- 标准化:提供了统一的项目结构,使得多个项目之间的管理更加规范和一致。
1.2 Maven 的优势
-
简化依赖管理:
- Maven 能够自动下载和管理项目所需的所有依赖库,无需手动处理 jar 包的下载和配置。
-
一致的项目结构:
- Maven 强制遵循标准的项目目录结构,降低了新开发人员的学习曲线,使项目更易于理解和维护。
-
快速构建和部署:
- 通过定义构建生命周期,Maven 能够快速、自动地构建项目并生成可部署的 artifact(如 JAR、WAR 等)。
-
强大的插件生态系统:
- Maven 拥有丰富的插件支持,可以满足项目构建、测试、报告等多种需求,增强了项目的可扩展性。
-
跨平台支持:
- Maven 是基于 Java 开发的,能够在不同操作系统上运行,并保证在各种环境中的一致性。
-
集成持续集成工具:
- Maven 可与 Jenkins、Travis CI 等持续集成工具无缝集成,支持自动化构建和部署,提高开发效率。
2. Maven 基础
2.1 Maven 的基本概念
-
项目对象模型(POM):Maven 使用
pom.xml
文件来描述项目的基本信息、依赖、插件及构建配置。POM 是 Maven 的核心,所有的构建和依赖管理都依赖于此。 -
依赖:项目所需的库和框架。Maven 能够自动下载并管理这些依赖,通过声明在
pom.xml
中来进行管理。 -
构建生命周期:Maven 定义了一系列的构建阶段(如
compile
、test
、package
、install
和deploy
),每个阶段对应一个具体的构建任务。 -
插件:Maven 的功能通过插件扩展,插件用于执行特定的任务,比如编译代码、运行测试、生成文档等。
2.2 Maven 的工作原理
-
项目配置:开发人员在
pom.xml
中定义项目的基本信息,包括项目名称、版本、依赖、构建插件等。 -
依赖解析:当构建项目时,Maven 会解析
pom.xml
中定义的依赖,自动下载所需的库和框架,这些依赖存储在本地 Maven 仓库中。 -
执行构建生命周期:
- Maven 拥有多个构建生命周期,每个生命周期由多个阶段组成。
- 当执行一个 Maven 命令时,Maven 会依次执行该生命周期中的各个阶段,直到到达指定的目标。例如,执行
mvn install
时,会依次执行validate
、compile
、test
、package
和install
阶段。
-
生成输出:经过构建的输出可以是 JAR、WAR 等可部署的文件,这些文件会被存放在目标目录中。
-
报告与文档生成:Maven 还能够生成项目的报告和文档,便于开发人员和团队理解项目结构和状态。
2.3 Maven 的安装与配置
Maven 需要 Java 环境支持,请确保已经安装了 JDK,并且环境变量 JAVA_HOME
已正确设置。
Maven 下载
通过网盘分享的文件:apache-maven-3.9.8-bin.zip
链接: https://pan.baidu.com/s/1McM_usmU_mwjmJuJlOEJXw?pwd=swc8 提取码: swc8
解压 Maven:将下载的压缩包解压到本地目录
设置环境变量:将 Maven 的 bin
目录添加到系统的 PATH
环境变量中(不加也行)
settings.xml
是 Maven 的配置文件,用于定义用户级的全局设置。它通常位于 Maven 安装目录下的 conf
文件夹中
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd">
<localRepository>D:\Tool\Develop\MAVENHOME\apache-maven-3.9.9-bin-jdk8\mavenwarehouse</localRepository>
<mirrors>
<!-- 配置阿里云镜像仓库 -->
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
<mirror>
<id>maven-default-http-blocker</id>
<mirrorOf>external:http:*</mirrorOf>
<name>Pseudo repository to mirror external repositories initially using HTTP.</name>
<url>http://0.0.0.0/</url>
<blocked>true</blocked>
</mirror>
</mirrors>
<profiles>
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>
</settings>
3. Maven 项目结构
3.1 Maven 项目的标准目录结构
Maven 定义了一种标准的项目目录结构,以便于管理和组织项目文件。以下是典型的 Maven 项目目录结构:
3.2 POM 文件(pom.xml)概述
POM(Project Object Model)文件是 Maven 项目的核心配置文件,通常命名为 pom.xml
。它以 XML 格式定义了项目的基本信息、依赖关系、构建配置等。POM 文件为 Maven 提供了项目的整体结构和管理信息。
POM 文件的基本元素:
- project: 根元素,所有其他元素都包含在此元素下。
- modelVersion: POM 文件的版本。
- groupId: 项目的唯一标识符,通常使用反向域名命名。
- artifactId: 项目的名称,通常为项目的名字。
- version: 项目的版本号。
- packaging: 项目打包方式,常见的有
jar
、war
等。 - dependencies: 项目依赖的库和框架。
3.3 POM 文件的基本配置
<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.example</groupId> <!-- 项目的组织ID -->
<artifactId>my-maven-project</artifactId> <!-- 项目的名称 -->
<version>1.0-SNAPSHOT</version> <!-- 项目的版本 -->
<packaging>jar</packaging> <!-- 项目的打包类型 -->
<name>My Maven Project</name> <!-- 项目的显示名称 -->
<description>A simple Maven project</description> <!-- 项目描述 -->
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.10</version> <!-- 项目依赖 -->
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope> <!-- 测试范围的依赖 -->
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source> <!-- Java 源代码版本 -->
<target>1.8</target> <!-- Java 字节码版本 -->
</configuration>
</plugin>
</plugins>
</build>
</project>
4. Maven 依赖管理
4.1 添加依赖
在 Maven 项目中添加依赖是通过在 pom.xml
文件中的 <dependencies>
标签下定义依赖项。每个依赖项包含 groupId
、artifactId
和 version
三个基本信息。
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.10</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.0.1-jre</version>
</dependency>
</dependencies>
4.2 依赖范围
Maven 提供了多种依赖范围(scope),用于控制依赖的可用性和生命周期。常见的依赖范围包括:
- compile: 默认范围,依赖会在编译、测试和运行时可用。
- provided: 表示该依赖在编译时可用,但在运行时由容器提供(如 Servlet API)。
- runtime: 表示该依赖在运行时可用,但在编译时不可用。
- test: 该依赖只在测试时可用,不会被打包到最终的应用程序中。
- system: 指定系统范围的依赖,要求提供该依赖的路径。
-
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> <!-- 仅在测试时可用 --> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> <!-- 由容器提供 --> </dependency> </dependencies>
5. Maven 插件
5.1 常用 Maven 插件介绍
5.2 自定义插件配置
5.3 插件的生命周期
6. Maven 构建生命周期
6.1 构建生命周期概述
Maven 的构建生命周期是指项目的构建、测试、打包、安装和部署等过程。Maven 通过定义一系列的生命周期和阶段,来简化项目管理,使得构建过程更加一致和可重复。主要有三种生命周期:
- default: 主要用于项目的构建,涉及编译、测试、打包等。
- clean: 用于清理项目,删除生成的文件。
- site: 用于生成项目的文档和站点。
6.2 常用生命周期阶段
-
validate
- 功能: 验证项目的结构和所需的信息是否完整,确保所有必要的信息(如 POM 文件中的依赖和插件)都已准备好。
-
compile
- 功能: 编译项目的源代码。源代码通常位于
src/main/java
目录,编译后的字节码会生成到target/classes
目录。
- 功能: 编译项目的源代码。源代码通常位于
-
test
- 功能: 执行测试代码,通常位于
src/test/java
目录。使用测试框架(如 JUnit 或 TestNG)来运行单元测试,并确保编译后的代码的功能。
- 功能: 执行测试代码,通常位于
-
package
- 功能: 将编译后的代码打包成可分发的格式,如 JAR、WAR 或 ZIP 文件。打包后的文件会生成在
target
目录中。
- 功能: 将编译后的代码打包成可分发的格式,如 JAR、WAR 或 ZIP 文件。打包后的文件会生成在
-
install
- 功能: 将打包好的文件安装到本地 Maven 仓库中,以供其他项目依赖。通常用于将库项目提供给其他开发者使用。
-
deploy
- 功能: 将最终的包复制到远程 Maven 仓库,以便与其他开发者或项目共享。通常在发布新版本时使用。
-
clean
- 功能: 清理项目,删除生成的文件和目录,通常包括
target
目录。此生命周期的主要阶段是clean
。
- 功能: 清理项目,删除生成的文件和目录,通常包括
-
site
- 功能: 生成项目的站点文档。包括项目的信息、报告和其他文档,通常在
target/site
目录下生成。
- 功能: 生成项目的站点文档。包括项目的信息、报告和其他文档,通常在
7. Maven 资源管理
7.1 资源文件的管理
Maven 项目通常会包含一些非代码文件,如配置文件、图片、静态资源等。这些文件通常放在 src/main/resources
目录下。Maven 会自动将该目录中的资源文件复制到构建输出目录(target/classes
),以便在运行时可以访问。
示例: 假设项目中有一个配置文件 config.properties
,它位于 src/main/resources
目录中,Maven 在构建时会将其复制到 target/classes
目录。
7.2 资源过滤
资源过滤是指在构建过程中对资源文件进行替换操作,比如将某些占位符替换为实际值。Maven 提供了资源过滤功能,可以在 POM 文件中配置。
示例: 假设有一个配置文件 config.properties
,内容如下:
database.url=${db.url}
database.username=${db.username}
database.password=${db.password}
要启用资源过滤,可以在 POM 文件中进行如下配置:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering> <!-- 启用过滤 -->
</resource>
</resources>
</build>
接着,在 pom.xml
中定义属性:
<properties>
<db.url>jdbc:mysql://localhost:3306/mydb</db.url>
<db.username>user</db.username>
<db.password>password</db.password>
</properties>
7.3 处理静态文件
Maven 还可以处理项目中的静态文件(如 HTML、CSS、JavaScript 等)。这些文件通常放在 src/main/webapp
目录下,Maven 会根据项目类型将其处理并复制到输出目录。
maven 插件 还可以做 代码质量管理 有兴趣的可以搜一搜吧 代码静态检查 代码覆盖率报告
原文地址:https://blog.csdn.net/pasaxiaorui/article/details/143486437
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!