🐣 Maven 是什么
Maven是一个项目管理和自动化构建工具,它基于项目对象模型(POM,Project Object Model)的概念。Maven可以帮助开发者更好地构建和管理任何基于Java的项目。它使用一个中央信息库来存储项目的构建信息、依赖关系等。
🐤 Maven 的核心概念
- POM(Project Object Model): POM是Maven项目的基本工作单元。它包含了项目的基本信息,比如项目名称、版本、依赖项、插件等。
- 依赖管理: Maven允许你指定项目依赖的外部库,自动从中央仓库下载这些依赖。
- 约定优于配置: Maven使用一个标准的目录布局和默认的构建生命周期,这意味着如果你遵循这些约定,你可以用最少的配置完成项目构建。
- 生命周期和插件: Maven的构建过程分为几个阶段(如编译、测试、打包等),每个阶段都可以绑定具体的任务,这些任务是通过插件来实现的。
🐥 Maven 标签
基础项目信息
<modelVersion>: 定义了POM模型的版本(通常是4.0.0)。1<modelVersion>4.0.0</modelVersion><groupId>: 定义了项目的组ID,通常表示项目所属的组织或者公司。1<groupId>com.example</groupId><artifactId>: 定义了项目的ID,这是项目的名称。1<artifactId>my-application</artifactId><version>: 定义了项目的版本。1<version>1.0-SNAPSHOT</version><packaging>: 定义了项目的打包方式,如jar、war等。1<packaging>jar</packaging>
依赖关系
<dependencies>: 包含项目所需的所有依赖。1 2 3 4 5 6 7 8<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies>
构建配置
<build>: 包含构建的配置信息,如源代码目录、目标目录、插件等。1 2 3 4 5 6 7 8 9 10 11 12 13<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build>
插件
<plugins>: 定义了项目构建过程中使用的插件。1 2 3 4 5 6 7<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.2</version> </plugin> </plugins>
项目属性
<properties>: 定义了一些项目的属性,可以在POM中重用。1 2 3<properties> <java.version>1.8</java.version> </properties>
分发管理
<distributionManagement>: 定义了项目分发的配置,如部署到Maven仓库的信息。1 2 3 4 5 6 7<distributionManagement> <repository> <id>central</id> <name>Central Repository</name> <url>http://path/to/your/repo</url> </repository> </distributionManagement>
仓库
<repositories>: 定义项目所使用的其他仓库的位置。1 2 3 4 5 6<repositories> <repository> <id>central</id> <url>https://repo.maven.apache.org/maven2</url> </repository> </repositories>
配置文件管理
<profiles>: 定义了一组不同的配置,可以根据不同的环境选择性地激活。1 2 3 4 5 6 7 8<profiles> <profile> <id>development</id> <properties> <environment>development</environment> </properties> </profile> </profiles>
这些标签构成了Maven pom.xml文件的基本框架,允许你配置项目的构建、依赖、插件等方面的细节。通过组合这些标签,你可以灵活地管理和构建你的Java项目。
🐦 Maven 的生命周期
Maven 使用一种称为构建生命周期的概念来管理项目构建过程。每个生命周期由一系列阶段(phase)组成,这些阶段在执行时按照特定的顺序进行。Maven 主要有三个标准的构建生命周期:clean、default(或称为build)和site。这些生命周期覆盖了项目的清理、构建和文档生成等方面。
1 Clean 生命周期
Clean 生命周期的目的是清理项目,删除之前构建生成的所有文件。它主要包含以下三个阶段:
- pre-clean:执行清理前的工作。
- clean:清理上一次构建生成的所有文件。
- post-clean:执行清理后的工作,如完成清理后的一些资源释放等。
2 Default 生命周期
Default 生命周期是Maven最核心的部分,负责项目的构建和部署。它包含了多个阶段,主要阶段如下:
- validate:验证项目是否正确,所有必要信息是否可用。
- compile:编译项目的源代码。
- test:使用适当的单元测试框架运行测试,这些测试不需要打包或部署。
- package:打包编译后的代码,通常是创建JAR或WAR文件。
- verify:对集成测试的结果进行检查,以确保质量达标。
- install:将包安装到Maven本地仓库,供本地其他项目使用。
- deploy:在构建环境中完成的最后一个阶段,将最终的包复制到远程仓库供其他开发人员和Maven项目使用。
3 Site 生命周期
Site 生命周期负责创建和发布项目的站点文档。它包括以下阶段:
- pre-site:执行生成项目站点前的工作。
- site:生成项目的站点文档。
- post-site:执行生成站点后的工作,如部署站点到服务器。
- site-deploy:将生成的站点文档部署到特定的服务器上。
🐔 dependencies 和 dependencyManagement
在Maven项目中,<dependencies>和<dependencyManagement>是用来管理项目依赖的两个重要元素。它们的作用和使用场景有所不同
<dependencies>
<dependencies>元素用于明确声明项目直接依赖的外部库。当你在项目中需要使用某个库时,就在<dependencies>中添加一个<dependency>项。每个<dependency>项都会指定依赖的groupId、artifactId、version等信息。
<dependencyManagement>
<dependencyManagement>元素用于在父POM中统一管理项目的依赖版本,而不是直接引入依赖。在<dependencyManagement>内部声明的依赖不会直接加入到项目中,只有当子模块中声明了相同的groupId和artifactId时,<dependencyManagement>中指定的版本和范围(scope)等才会生效。这使得在多模块项目中能够很方便地统一管理依赖版本,避免了版本冲突和依赖的重复声明。
- 在父POM中使用
<dependencyManagement>管理多模块项目的依赖版本:子模块需要这个依赖时,应该在子模块的pom.xml中的<dependencies>部分声明这个依赖,这样才能真正引入到子模块中。 - 在单个模块项目中或父模块自身需要使用某个依赖:除了在
<dependencyManagement>中指定版本信息外,还需要在<dependencies>中声明这个依赖,才能将其引入项目中。
| |
