当前位置: 首页 > news >正文

项目管理工具Maven

Maven的概念

什么是Maven

什么是依赖管理

对第三方依赖包的管理,可以连接互联网下载项目所需第三方jar包。

对自己开发的模块的管理,可以像引用第三方依赖包一样引用自己项目的依赖包。

 什么是项目构建

一、项目构建的定义

项目构建是将源代码经过编译、测试、运行、打包、部署等一系列流程,最终形成可运行程序或可交付成果的过程。它涵盖从代码编写到上线的全流程自动化处理。

二、传统项目与 Maven 项目构建方式对比

  1. 传统项目构建
    • 工具与流程
      • 使用 IDE(如 Idea)手动编写源代码和配置文件。
      • 手动触发编译,通过 Junit 进行单元测试。
      • 手动将项目打包为 war 包,部署到 Tomcat 等服务器运行。
    • 特点:依赖 IDE 图形化操作,流程需手动分步完成,大型项目中协作成本较高。
  2. Maven 项目构建
    • 标准化流程
      • 通过 Maven 将构建过程划分为多个阶段,每个阶段可通过单一命令完成:
        清理(clean)→ 编译(compile)→ 测试(test)→ 报告(site)→ 打包(package)→ 部署(deploy)  
        
      • 示例命令
        • mvn tomcat:run 直接编译、打包并部署到 Tomcat 运行。
    • 特点
      • 基于命令行操作,流程自动化程度高。
      • 标准化阶段划分,便于团队协作(如不同成员专注于编译、测试等特定阶段)。

三、Maven 项目构建的核心优势

  1. 流程标准化:统一构建步骤,避免因环境差异导致的问题。
  2. 命令行驱动:通过简单命令完成复杂流程,减少手动操作误差。
  3. 团队协作友好:标准化流程降低协作成本,适合大型项目多人开发。

总结:传统项目构建依赖手动操作和 IDE 工具,而 Maven 通过标准化流程和命令行机制,显著提升了构建效率和团队协作能力,成为现代 Java 项目的主流构建工具。

 

Maven的应用场景

maven的应用场景,开发人员只要按着maven标准的目录结构进行开发即可,然后提交代码。在测试服务器上拉取Java源码,然后可以使用maven的自动化项目构建完成项目的清理、编译、测试、打包和安装部署等。

 为什么使用Maven

 Maven模型

 安装流程

一、安装准备

  1. 环境要求

    • JDK 1.8 或更高版本(需提前安装并配置好 JAVA_HOME 环境变量)。
  2. 下载 Maven

    • 访问官网:Download Apache Maven – Maven
    • 选择版本 3.6.0 并下载二进制包:Index of /dist/maven/maven-3/3.6.0/binaries

二、安装步骤

  1. 解压文件

    • 将下载的压缩包解压到无中文路径的目录(如 D:\maven\apache-maven-3.6.0)。

  1. 安装目录结构

    apache-maven-3.6.0/
    ├── bin/           # Maven 运行脚本(mvn、mvnDebug)
    ├── boot/          # 类加载器框架
    ├── conf/          # 配置文件(settings.xml)
    ├── lib/           # 依赖库
    └── LICENSE.txt    # 许可证信息
    

三、环境变量配置

  1. 设置 MAVEN_HOME

    • 变量名:MAVEN_HOME
    • 变量值:Maven 解压路径(如 D:\maven\apache-maven-3.6.0

  1. 更新 Path 变量

    • 添加 %MAVEN_HOME%\bin 到系统 Path 变量末尾。

四、配置文件管理

  1. 全局配置

    • 路径:%MAVEN_HOME%\conf\settings.xml
    • 作用:所有用户共享的配置(如镜像源、本地仓库路径)。
  2. 用户配置

    • 路径:~/.m2/settings.xml(Windows:C:\Users\用户名\.m2\settings.xml
    • 作用:覆盖全局配置,仅对当前用户生效。

五、验证安装

  1. 检查版本

    mvn -version
    
    输出示例:
    Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f; 2018-10-24T18:41:47+08:00)
    Maven home: D:\maven\apache-maven-3.6.0
    Java version: 1.8.0_281, vendor: Oracle Corporation
    

 

 Maven的第一个项目

一、Maven 项目目录结构

Maven 项目遵循标准目录约定,主要结构如下:

Hello/                   # 项目根目录
├── pom.xml              # 项目配置文件
├── src/                 # 源代码目录
│   ├── main/            # 主程序代码
│   │   ├── java/        # Java 源代码 (如: cn/tx/maven/Hello.java)
│   │   └── resources/   # 资源文件 (如: 配置文件)
│   └── test/            # 测试代码
│       ├── java/        # 测试代码 (如: cn/tx/maven/HelloTest.java)
│       └── resources/   # 测试资源文件
└── target/              # 编译输出目录 (自动生成)

二、pom.xml 配置文件

pom.xml 是 Maven 项目的核心配置,定义项目信息和依赖:

<project xmlns="http://maven.apache.org/POM/4.0.0"><modelVersion>4.0.0</modelVersion><groupId>cn.tx.maven</groupId>    <!-- 项目组标识 (通常是域名倒序) --><artifactId>Hello</artifactId>    <!-- 项目唯一标识符 --><version>0.0.1-SNAPSHOT</version> <!-- 版本号 (-SNAPSHOT 表示开发版) --><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.9</version><scope>test</scope>           <!-- 仅用于测试阶段 --></dependency></dependencies>
</project>

三、示例代码

  1. 主程序类 Hello.java

    package cn.tx.maven;
    public class Hello {public String sayHello(String name) {return "Hello " + name + "!";}
    }
    
  2. 测试类 HelloTest.java

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

    maven的项目操作

打开cmd命令行,进入Hello项目根目录执行 mvn compile命令,查看根目录变化

cmd 中继续录入mvn clean命令,然后再次查看根目录变化

cmd 中录入 mvn compile命令, 查看根目录变化

cmd 中录入 mvn  test命令,查看根目录变化

cmd 中录入 mvn package命令,查看根目录变化

cmd 中录入 mvn  install 查看仓库会把项目安装到仓库里

Maven的第二个项目

一、项目结构与依赖配置

  1. 项目目录结构

    HelloFriend/
    ├── pom.xml
    └── src/├── main/│   ├── java/│   │   └── cn/tx/maven/HelloFriend.java│   └── resources/└── test/├── java/│   └── cn/tx/maven/HelloFriendTest.java└── resources/
    
  2. pom.xml 依赖配置

    <dependencies><!-- JUnit 测试框架 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.9</version><scope>test</scope></dependency><!-- 依赖 Hello 项目 --><dependency><groupId>cn.tx.maven</groupId><artifactId>Hello</artifactId><version>0.0.1-SNAPSHOT</version><scope>compile</scope></dependency>
    </dependencies>
    

二、代码实现

  1. 主类 HelloFriend.java

    package cn.tx.maven;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. 测试类 HelloFriendTest.java

    package cn.tx.maven;import static junit.framework.Assert.assertEquals;
    import org.junit.Test;public class HelloFriendTest {@Testpublic void tesHelloFriend() {HelloFriend helloFriend = new HelloFriend();String results = helloFriend.sayHelloToFriend("zhangsan");assertEquals("Hello zhangsan! I am John", results);}
    }
    

三、依赖问题与解决方案

  1. 错误信息

    Could not find artifact cn.tx.maven:Hello:jar:0.0.1-SNAPSHOT
    

    原因:Maven 在本地仓库中找不到 Hello 项目的 JAR 包。

  2. 解决方案

    • 步骤 1:在 Hello 项目根目录执行安装命令
      cd Hello/
      mvn clean install  # 编译、测试并安装到本地仓库
      
    • 步骤 2:验证本地仓库
      # Linux/macOS
      ls ~/.m2/repository/cn/tx/maven/Hello/0.0.1-SNAPSHOT/# Windows
      dir %USERPROFILE%\.m2\repository\cn\tx\maven\Hello\0.0.1-SNAPSHOT\
      
    • 步骤 3:重新构建 HelloFriend
      cd ../HelloFriend/
      mvn clean package
      

四、Maven 依赖解析流程

  1. 依赖查找顺序
    本地仓库 → 远程仓库(镜像源) → 中央仓库
    
  2. 镜像配置(settings.xml
    <mirrors><mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><url>https://maven.aliyun.com/repository/public</url></mirror>
    </mirrors>
    

 

IDEA整合Maven项目

IDEA的Maven全局配置

启动IDEA后找到Settings

 以上设置完成表示在本idea上,所有项目如未对Maven的配置进行单独配置,则默认均使用该Maven版本和本地库设置;

IDEA创建Maven的Java项目

 

至此Maven的Java项目创建完成 

测试Maven的jar包引入 

 

以上在IDEA上使用Maven进行Java项目的创建及测试已完成! 

 IDEA导入既有Maven项目

以导入刚才的Maven项目的例子做示范:

 

导入引入依赖Hello项目的HelloFriend项目,可以看到Hello项目已经被打成jar包引用到HelloFriend的Maven依赖中 

 scope

在 Java 项目中,依赖范围(Scope) 是 Maven、Gradle 等构建工具中的重要概念,用于控制依赖的 可见性生命周期 和 打包行为。合理设置依赖范围可以避免类冲突、减小打包体积,并确保项目结构清晰。

一、Maven 中的主要 Scope

Maven 定义了 6 种依赖范围,最常用的是以下 4 种:

1. compile(默认)
  • 可见性:主代码(src/main)和测试代码(src/test)均可使用。
  • 生命周期:编译、测试、运行时均有效。
  • 打包:会被包含在最终的 JAR/WAR 文件中。
  • 示例:Spring 框架、Jackson 等生产环境必需的依赖。
2. test
  • 可见性:仅测试代码(src/test)可用。
  • 生命周期:仅测试编译和运行时有效。
  • 打包:不会被打包到最终产物中。
  • 示例:JUnit、Mockito 等测试框架。
3. provided
  • 可见性:主代码和测试代码均可使用。
  • 生命周期:编译和测试时有效,但运行时由容器提供(如 Servlet API)。
  • 打包:不会被打包(因为运行环境已提供)。
  • 示例:Java EE API、Servlet API(如 Tomcat 已包含)。
4. runtime
  • 可见性:测试代码和运行时可用,主代码编译时不需要(如 JDBC 驱动)。
  • 生命周期:测试和运行时有效。
  • 打包:会被包含在最终产物中。
  • 示例:JDBC 驱动、Hibernate 运行时依赖。

示例对比

假设使用 Maven 管理依赖:

原配置(test 范围)
<dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.8.2</version><scope>test</scope> <!-- 仅测试代码可用 -->
</dependency>
修改后(compile 范围)
<dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.8.2</version><!-- 默认scope为compile,主代码和测试代码均可使用 -->
</dependency>

 

相关文章:

  • 四、关系数据库标准语言SQL_2
  • 使用 Fetch + Streams 处理流式响应(Streaming Response)
  • 【空间光学系统与集成微纳光子学系统简介】
  • Proteus寻找元器件(常见)
  • 带你手写React中的useReducer函数。(底层实现)
  • ESP8266远程控制:实现网络通信与设备控制
  • Nginx网站服务:从入门到LNMP架构实战
  • 日志技术-LogBack、Logback快速入门、Logback配置文件、Logback日志级别
  • WebFuture:设置不自动删除操作日志
  • 26 C 语言函数深度解析:定义与调用、返回值要点、参数机制(值传递)、原型声明、文档注释
  • 万兴PDF手机版
  • 前端面试题目-高频问题集合
  • Windows10下使用QEMU安装Ubuntu20.04虚拟机,并启用硬件加速
  • 【目标检测】【AAAI-2022】Anchor DETR
  • 【孙悟空喝水】2022-2-7
  • 引进白光干涉仪管控微流控芯片形貌,性能大幅提升
  • 延迟复制与主从延迟监控指南
  • @Docker Compose 部署 Prometheus
  • Vue3 + VTable 高性能表格组件完全指南,一个基于 Canvas 的高性能表格组件
  • 飞牛fnNAS的Docker应用之迅雷篇
  • 网站三级域名对网站有影响吗/怎么引流推广自己的产品
  • 四川泸州做网站的公司有哪些/seo网络推广培训
  • 做长图网站/搜索引擎优化指的是什么
  • 江都建设网站/网站查询
  • 环保网站建设情况报告/百度网站怎么做
  • 杭州网站建设设计公司/百度导航和百度地图