Maven的概念与初识Maven

目录

一、Maven的概念

[1. 什么是Maven](#1. 什么是Maven)

[2. 项目构建:从代码到部署的标准化流程](#2. 项目构建:从代码到部署的标准化流程)

[2.1 Maven构建生命周期](#2.1 Maven构建生命周期)

[2.2 传统构建 vs Maven构建](#2.2 传统构建 vs Maven构建)

[3. 依赖管理:解决"JAR地狱"的利器](#3. 依赖管理:解决“JAR地狱”的利器)

[3.1 依赖声明](#3.1 依赖声明)

[3.2 依赖传递与冲突解决](#3.2 依赖传递与冲突解决)

[4. Maven仓库:依赖的存储与分发](#4. Maven仓库:依赖的存储与分发)

[4.1 仓库类型](#4.1 仓库类型)

[4.2 配置镜像仓库](#4.2 配置镜像仓库)

[5. Maven模型](#5. Maven模型)

二、初识Maven

[1. 安装Maven](#1. 安装Maven)

[1.1 环境准备](#1.1 环境准备)

[1.2 配置步骤](#1.2 配置步骤)

[2. 创建第一个Maven项目](#2. 创建第一个Maven项目)

[2.1 项目结构](#2.1 项目结构)

[2.2 编写POM文件](#2.2 编写POM文件)

[2.3 编写代码与测试](#2.3 编写代码与测试)

[2.4 构建与运行](#2.4 构建与运行)

[3. Maven的第二个项目](#3. Maven的第二个项目)

[3.1 项目结构](#3.1 项目结构)

[3.2 编写POM文件](#3.2 编写POM文件)

[3.3 编写代码与测试](#3.3 编写代码与测试)

[3.4 测试打包HelloFriend项目](#3.4 测试打包HelloFriend项目)

四、常见问题与解决方案

五、总结


一、Maven的概念

1. 什么是Maven

1.1 Maven (意为"专家")是一款专为Java项目设计的跨平台项目管理工具,核心功能包括:

  • 项目构建:自动化编译、测试、打包、部署。

    • 理想的项目构建:高度自动化,跨平台,可重用的组件,标准化的流程
  • 依赖管理:自动下载和管理第三方库(JAR包)。

  • 项目信息管理:统一维护项目元数据(如版本、开发者信息)。

1.2 为什么需要Maven?

  • 传统构建的痛点

    • 手动操作:开发人员需手动编译、测试、部署,效率低。

    • 依赖混乱:JAR包版本冲突,难以维护。

    • 缺乏标准化:不同开发者的环境配置差异导致协作困难。

  • Maven的解决方案

    • 约定优于配置 :默认目录结构(如src/main/java)减少配置成本。

    • 生命周期管理 :通过命令(如mvn compile)自动化执行构建流程。

    • 中央仓库支持:从全球仓库自动下载依赖,避免手动管理。

2. 项目构建:从代码到部署的标准化流程

2.1 Maven构建生命周期

Maven定义了三套生命周期,每个生命周期包含多个阶段(Phase):

  1. Clean :清理项目(删除target目录)。

  2. Default:核心构建流程(编译、测试、打包、安装)。

  3. Site:生成项目文档站点。

典型构建阶段

bash 复制代码
mvn clean       # 清理
mvn compile     # 编译主代码
mvn test        # 运行单元测试
mvn package     # 打包为JAR/WAR
mvn install     # 安装到本地仓库
mvn deploy      # 部署到远程仓库

2.2 传统构建 vs Maven构建

步骤 传统方式 Maven方式
编译 手动执行javac mvn compile
测试 手动运行JUnit测试类 mvn test(自动执行所有测试)
依赖管理 手动下载并配置JAR包 声明依赖,Maven自动下载
打包 手动生成JAR/WAR文件 mvn package(按POM配置生成包)

3. 依赖管理:解决"JAR地狱"的利器

3.1 依赖声明

pom.xml中通过**坐标(GAV)**声明依赖:

XML 复制代码
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>
  • GAVgroupId(组织标识)、artifactId(项目名)、version(版本)。

  • scope :控制依赖的作用范围(如test表示仅测试阶段有效)。

3.2 依赖传递与冲突解决

  • 依赖传递:若A依赖B,B依赖C,则A自动引入C。

  • 冲突解决 :Maven采用最短路径优先先声明优先原则,避免版本冲突。

4. Maven仓库:依赖的存储与分发

4.1 仓库类型

  1. 本地仓库 :默认位于~/.m2/repository,缓存下载的依赖。

  2. 远程仓库

    • 中央仓库:Maven官方维护,包含绝大多数开源库。

    • 私服:企业内部搭建,加速依赖下载并管理私有组件。

4.2 配置镜像仓库

settings.xml中配置阿里云镜像加速下载:

XML 复制代码
<mirror>
    <id>aliyun</id>
    <name>Aliyun Maven</name>
    <url>https://maven.aliyun.com/repository/public</url>
    <mirrorOf>central</mirrorOf>
</mirror>

5. Maven模型

二、初识Maven

1. 安装Maven

1.1 环境准备

  • JDK 1.8+ :确保JAVA_HOME环境变量正确配置。

  • 下载Maven :从官网下载二进制包(如apache-maven-3.8.6-bin.zip)。

1.2 配置步骤

  1. 解压到无中文路径 :如D:\Tools\apache-maven-3.8.6

  2. 设置环境变量

    • MAVEN_HOME:Maven解压目录。

    • Path :添加%MAVEN_HOME%\bin

  3. 验证安装

bash 复制代码
mvn -v
# 输出示例:Apache Maven 3.8.6 ... Java version: 17.0.5

2. 创建第一个Maven项目

2.1 项目结构

Maven强制约定目录结构,确保标准化:

bash 复制代码
Hello
├── src
│   ├── main
│   │   ├── java         # Java源代码
│   │   └── resources    # 配置文件(如log4j.properties)
│   └── test
│       ├── java         # 测试代码
│       └── resources    # 测试配置
├── target               # 构建输出(编译后的类、JAR包)
└── pom.xml              # 项目对象模型(核心配置文件)

2.2 编写POM文件

XML 复制代码
<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>cn.tx.maven</groupId>
  <artifactId>Hello</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>Hello</name>
  
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.9</version>
			<scope>test</scope>
		</dependency>		
		
	</dependencies>
</project>

2.3 编写代码与测试

(1)主类:在src/main/java/cn/tx/maven目录下新建文件Hello.java

java 复制代码
package cn.tx.maven;
public class Hello {
	public String sayHello(String name){
		return "Hello "+name+"!";
	}
}

(2)测试类:在/src/test/java/cn/tx/maven目录下新建测试文件HelloTest.java

java 复制代码
package cn.tx.maven;
import org.junit.Test;
import static junit.framework.Assert.*;
public class HelloTest {
	@Test
	public void testHello(){
		Hello hello = new Hello();
		String results = hello.sayHello("maven");
		assertEquals("Hello maven!",results);		
	}
}

2.4 构建与运行

  • 打开cmd命令行,进入Hello项目根目录执行 mvn compile命令,查看根目录变化
  • cmd 中继续录入mvn clean命令,然后再次查看根目录变化
  • cmd 中录入mvn clean compile命令, 查看根目录变化
  • cmd 中录入 mvn clean test命令,查看根目录变化
  • cmd 中录入 mvn clean package命令,查看根目录变化
  • cmd 中录入 mvn clean install 查看仓库会把项目安装到仓库里

3. M aven 的第二个项目

3.1 项目结构

bash 复制代码
HelloFriend
├── src
│   ├── main
│   │   ├── java         # Java源代码
│   │   └── resources    # 配置文件(如log4j.properties)
│   └── test
│       ├── java         # 测试代码
│       └── resources    # 测试配置
├── target               # 构建输出(编译后的类、JAR包)
└── pom.xml              # 项目对象模型(核心配置文件)

3.2 编写POM文件

XML 复制代码
<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>cn.tx.maven</groupId>
  <artifactId>HelloFriend</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>HelloFriend</name>
  
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.9</version>
			<scope>test</scope>
		</dependency>		
		
		<dependency>
			<groupId>cn.tx.maven</groupId>
			<artifactId>Hello</artifactId>
			<version>0.0.1-SNAPSHOT</version>
			<scope>compile</scope>
		</dependency>		
		
	</dependencies>
</project>

3.3 编写代码与测试

(1)主类:在src/main/java/cn/tx/maven目录下新建文件HelloFriend.java

java 复制代码
package cn.tx.maven;

import cn.tx.maven.Hello;

public class HelloFriend {

	public String sayHelloToFriend(String name){
		
		Hello hello = new Hello();
		String str = hello.sayHello(name)+" I am "+this.getMyName();
		System.out.println(str);
		return str;
	}
	
	public String getMyName(){
		return "John";
	}

}

(2)测试类:在/src/test/java/cn/tx/maven目录下新建测试文件HelloFriendTest.java

java 复制代码
package cn.tx.maven;

import static junit.framework.Assert.assertEquals;

import org.junit.Test;

import cn.tx.maven.Hello;


public class HelloFriendTest {
	@Test
	public void tesHelloFriend(){
		
		HelloFriend helloFriend = new HelloFriend();
		String results = helloFriend.sayHelloToFriend("zhangsan");
		assertEquals("Hello zhangsan! I am John",results);		

	}
}

3.4 测试打包HelloFriend项目

在HelloFriend目录下执行命令mvn package

四、常见问题与解决方案

  1. 依赖下载失败

    • 检查镜像配置 :确保settings.xml中配置了可靠的镜像源(如阿里云)。

    • 清理本地仓库 :删除~/.m2/repository中损坏的依赖目录,重新下载。

  2. 构建时报错"找不到符号"

    • 检查JDK版本:确保POM中配置的JDK版本与环境一致。

    • 重新编译 :执行mvn clean compile

  3. 插件兼容性问题

五、总结

Maven通过标准化构建流程自动化依赖管理,极大提升了Java项目的开发效率与协作能力。从安装配置到创建第一个项目,再到管理复杂依赖,Maven始终是开发者不可或缺的工具。

相关推荐
秋野酱3 分钟前
基于 Spring Boot 的银行柜台管理系统设计与实现(源码+文档+部署讲解)
java·spring boot·后端
JAVA学习通17 分钟前
JAVA多线程(8.0)
java·开发语言
不当菜虚困20 分钟前
JAVA设计模式——(七)代理模式
java·设计模式·代理模式
joke_xiaoli29 分钟前
tomcat Server 连接服务器 进展
java·服务器·tomcat
陶然同学40 分钟前
RabbitMQ全栈实践手册:从零搭建消息中间件到SpringAMQP高阶玩法
java·分布式·学习·rabbitmq·mq
shanzhizi42 分钟前
springboot入门-controller层
java·spring boot·后端
cloues break.1 小时前
C++初阶----模板初阶
java·开发语言·c++
陌殇殇1 小时前
Java使用IText7动态生成带审批文本框的PDF文档
java·pdf
weixin_456588151 小时前
【Maven】特殊pom.xml配置文件 - BOM
xml·java·maven
bjzhang751 小时前
如何创建一个父类 Maven项目,然后在父类下再创建子项目,构建多模块 Maven 项目
java·maven