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 如何使用

(一)下载安装

  1. 下载路径:http://maven.apache.org/download.cgi
  2. 解压:要求目录不要过深、不要有中文和特殊符号
  3. 必须配置JAVA_HOME 环境变量。
  4. 配置环境变量
    1)MAVEN_HOME 值为Maven的解压路径: 如: MAVEN_HOME: E:\tools\apache-maven-3.6.3
    2)在path中配置:%MAVEN_HOME%\bin
  5. 查看安装是否正确:在dos中 通过命令:mvn -v

(二) 本地仓库配置

  1. Maven的核心程序并不包含具体功能,仅负责宏观调度。具体功能由插件来完成。Maven核心程序会到本地仓库中查找插件。如果本地仓库中没有就会从远程中央仓库下载。此时如果不能上网则无法执行Maven的具体功能。为了解决这个问题,我们可以将Maven的本地仓库指向一个在联网情况下下载好的目录。
  2. Maven默认的本地仓库
    C:\Users\ljw\.m2\repository目录。
  3. Maven的核心配置文件位置
    D:\maven\apache-maven-3.6.3\conf\settings.xml
  4. 在配置文件中设置本地仓库
    <localRepository>D:/maven/repository</localRepository>

(三)第一个Maven程序

  1. 创建约定的目录结构
demoproject(名称)
	 src
	 ——main
	 ————java
	 ————resources
	 ——test
	 ————java
	 ————resources
	 pom.xml

main目录用于存放主程序。
test目录用于存放测试程序。
java目录用于存放源代码文件。
resources目录用于存放配置文件和资源文件。
  1. 创建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>
  1. 编写主代码
package com.ujiuye;

public class Demo01{
	
	public void method(){
		System.out.println("welcome maven ~~~");
	}
		
}
  1. 编写测试代码
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();
	}
		
}
  1. 运行几个基本的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的核心概念

  1. POM
  2. 约定的目录结构
  3. 坐标
  4. 依赖
  5. 仓库
  6. 生命周期
  7. 插件和目标
  8. 继承
  9. 聚合

(一)POM

Project Object Model:项目对象模型。将Java工程的相关信息封装为对象作为便于操作和管理的模型。Maven工程的核心配置。可以说学习Maven就是学习pom.xml文件中的配置。

(二)目录结构

现在JavaEE开发领域普遍认同一个观点:约定>配置>编码。意思就是能用配置解决的问题就不编码,能基于约定的就不进行配置。而Maven正是因为指定了特定文件保存的目录才能够对我们的Java工程进行自动化构建.

(三)坐标

  1. Maven的坐标(类似几何的坐标)
使用如下三个向量在Maven的仓库中唯一的确定一个Maven工程。
[1]groupId:公司或组织的域名倒序+当前项目名称
[2]artifactId:当前项目的模块名称
[3]version:当前模块的版本
[4]例如:
<groupId>com.ujiuye</groupId>
<artifactId>maven01</artifactId>
<version>1.0-SNAPSHOT</version>	
  1. 如何通过坐标到仓库中查找jar包

    [1]将gav三个向量连起来
    com.ujiuye+maven01+1.0-SNAPSHOT
    [2]以连起来的字符串作为目录结构到仓库中查找
    com/ujiuye/maven01/1.0-SNAPSHOT/maven01-0.0.1-SNAPSHOT.jar

  2. 注意

    我们自己的Maven工程必须执行安装操作才会进入仓库。安装的命令是:mvn install

posted @   曹安人  阅读(46)  评论(0编辑  收藏  举报
编辑推荐:
· 从 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)
点击右上角即可分享
微信分享提示