maven
Maven
一、Maven简介
1. 什么是maven
Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。
Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。
Maven这个单词来自于意第绪语(犹太语),意为知识的积累,最初在Jakata Turbine项目中用来简化构建过程。当时有一些项目(有各自Ant build文件),仅有细微的差别,而JAR文件都由CVS来维护。于是希望有一种标准化的方式构建项目,一个清晰的方式定义项目的组成,一个容易的方式发布项目的信息,以及一种简单的方式在多个项目中共享JARs
2. 什么是构建?(背)
将写好的java代码等资源文件,通过清理, 编译,测试,报告,打包,安装,部署的整个过程称为项目构建.
名称解释:
1) 清理:删除以前的编译结果,为重新编译做好准备。
2) 编译:将Java源程序编译为字节码文件。
3) 测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。
4) 报告:在每一次测试后以标准的格式记录和展示测试结果。
5) 打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java工程对应jar包,Web工程对应war包。
6) 安装:在Maven环境下特指将打包的结果——jar包或war包安装到本地仓库中。
7) 部署:将打包的结果部署到远程仓库或将war包部署到服务器上运行。
Maven可以自动的从构建过程的起点一直执行到终点。
二、为什么使用Maven作用
(一)添加第三方jar包
maven 只需要一段描述信息,然后就可以添加对应依赖的jar.
(二) jar包之间的依赖关系
如果一个jar 运行时,需要依赖其它的jar, maven 会自动添加对应的依赖。
(三) 处理jar包之间的冲突
maven会根据依赖的原则,自动解决一些jar 包之间的冲突。
(四) 获取第三方jar包
maven 会自动从本地仓库或者远程仓库获取需要的jar.
(五) 将项目拆分成多个工程模块
将项目拆分成多个模块,然后使用pom 来管理依赖关系。
(六)实现项目的分布式部署
实现分布式部署。
三、Maven 如何使用
(一)下载安装
- 下载路径:http://maven.apache.org/download.cgi
- 解压:要求目录不要过深、不要有中文和特殊符号
- 必须配置JAVA_HOME 环境变量。
- 配置环境变量
1)MAVEN_HOME 值为Maven的解压路径: 如:MAVEN_HOME: E:\tools\apache-maven-3.6.3
2)在path中配置:%MAVEN_HOME%\bin
- 查看安装是否正确:在dos中 通过命令:mvn -v
(二) 本地仓库配置
- Maven的核心程序并不包含具体功能,仅负责宏观调度。具体功能由插件来完成。Maven核心程序会到本地仓库中查找插件。如果本地仓库中没有就会从远程中央仓库下载。此时如果不能上网则无法执行Maven的具体功能。为了解决这个问题,我们可以将Maven的本地仓库指向一个在联网情况下下载好的目录。
- Maven默认的本地仓库
C:\Users\ljw\.m2\repository目录。
- Maven的核心配置文件位置
D:\maven\apache-maven-3.6.3\conf\settings.xml
- 在配置文件中设置本地仓库
<localRepository>D:/maven/repository</localRepository>
(三)第一个Maven程序
- 创建约定的目录结构
demoproject(名称)
src
——main
————java
————resources
——test
————java
————resources
pom.xml
main目录用于存放主程序。
test目录用于存放测试程序。
java目录用于存放源代码文件。
resources目录用于存放配置文件和资源文件。
- 创建Maven的核心配置文件pom.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.ujiuye</groupId>
<artifactId>maven01</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
- 编写主代码
package com.ujiuye;
public class Demo01{
public void method(){
System.out.println("welcome maven ~~~");
}
}
- 编写测试代码
package com.ujiuye;
import org.junit.Test;
import com.ujiuye.Demo01;
public class Demo01Test {
@Test
public void method(){
System.out.println("welcome maven Test ~~~");
Demo01 de = new Demo01();
de.method();
}
}
- 运行几个基本的Maven命令
打开cmd命令行,进入Maven项目根目录(pom.xml文件所在目录)执行mvn compile命令,查看根目录变化
cmd 中继续录入mvn clean命令,然后再次查看根目录变化
cmd 中录入 mvn compile命令, 查看根目录变化
cmd 中录入 mvn test-compile命令, 查看target目录的变化
cmd 中录入 mvn test命令,查看target目录变化
cmd 中录入 mvn package命令,查看target目录变化
cmd 中录入 mvn install命令, 查看本地仓库的目录变化
注意:运行Maven命令时一定要进入pom.xml文件所在的目录!
四、Maven的核心概念
- POM
- 约定的目录结构
- 坐标
- 依赖
- 仓库
- 生命周期
- 插件和目标
- 继承
- 聚合
(一)POM
Project Object Model:项目对象模型。将Java工程的相关信息封装为对象作为便于操作和管理的模型。Maven工程的核心配置。可以说学习Maven就是学习pom.xml文件中的配置。
(二)目录结构
现在JavaEE开发领域普遍认同一个观点:约定>配置>编码。意思就是能用配置解决的问题就不编码,能基于约定的就不进行配置。而Maven正是因为指定了特定文件保存的目录才能够对我们的Java工程进行自动化构建.
(三)坐标
- Maven的坐标(类似几何的坐标)
使用如下三个向量在Maven的仓库中唯一的确定一个Maven工程。
[1]groupId:公司或组织的域名倒序+当前项目名称
[2]artifactId:当前项目的模块名称
[3]version:当前模块的版本
[4]例如:
<groupId>com.ujiuye</groupId>
<artifactId>maven01</artifactId>
<version>1.0-SNAPSHOT</version>
-
如何通过坐标到仓库中查找jar包
[1]将gav三个向量连起来
com.ujiuye+maven01+1.0-SNAPSHOT
[2]以连起来的字符串作为目录结构到仓库中查找
com/ujiuye/maven01/1.0-SNAPSHOT/maven01-0.0.1-SNAPSHOT.jar
-
注意
我们自己的Maven工程必须执行安装操作才会进入仓库。安装的命令是:
mvn install
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)