Maven 学习笔记

88 阅读2分钟

一、核心概念

  • POM(项目对象模型)pom.xml 文件定义项目结构、依赖、构建配置等。

  • 坐标:唯一标识项目,包括 groupId(组织名)、artifactId(项目名)、version(版本)。

  • 仓库:存储构件(jar、包等),分本地仓库(本地目录)、中央仓库(Maven 公共库)、远程仓库(自定义仓库)。

二、生命周期

  • 清理生命周期mvn clean(删除编译产物)。

  • 编译生命周期mvn compile(编译主代码)、mvn test-compile(编译测试代码)。

  • 打包生命周期mvn package(打包项目,如生成 jar/war)。

  • 安装生命周期mvn install(将包安装到本地仓库)。

三、常用命令

  • mvn compile:编译主代码。

  • mvn test:运行测试用例。

  • mvn package:打包项目。

  • mvn install:安装到本地仓库。

  • mvn dependency:tree:查看依赖树。

四、pom.xml 关键配置

<project>  
  <!-- 坐标 -->  
  <groupId>com.example</groupId>  
  <artifactId>demo</artifactId>  
  <version>1.0.0</version>  

  <!-- 依赖 -->  
  <dependencies>  
    <dependency>  
      <groupId>junit</groupId>  
      <artifactId>junit</artifactId>  
      <version>4.13</version>  
      <scope>test</scope> <!-- 作用域:compile(默认)、test、provided 等 -->  
    </dependency>  
  </dependencies>  

  <!-- 仓库配置 -->  
  <repositories>  
    <repository>  
      <id>my-repo</id>  
      <url>http://repo.example.com</url>  
    </repository>  
  </repositories>  
  
   <!-- 打包类型 -->
   <packaging>jar</packaging>
   <!-- 默认是 jar,还有 war、pom 等类型 -->
</project>  

五、依赖管理

  • 依赖 作用域 (scope)

    • compile:编译、测试、运行都需要(默认)。
    • test:仅测试阶段需要(如 JUnit)。
    • provided:运行环境已提供(如 Web 容器的 Servlet 依赖)。
  • 依赖传递:A 依赖 B,B 依赖 C,则 A 间接依赖 C(可通过 exclusions 排除传递依赖)。

  • 打包类型( pom ,jar,war)

    • jar

    •   

      • 用途:常用于打包 Java 类库或独立 Java 程序。
      • 特点:方便代码复用和分发,其他项目能把它作为依赖引入。
    • war

      • 用途:专门用于打包 Web 应用程序。

      • 特点:包含完整 Web 资源,可直接部署到支持 Servlet 规范的 Web 服务器运行。

    • pom

    •   

      • 用途:用于父项目或聚合项目。

      • 特点:本身不打包成具体构件,主要管理和配置其他模块,实现配置共享与复用。

六、插件与高级特性

  • 插件:Maven 功能扩展,如 maven-compiler-plugin 管理编译版本。
  • 继承:通过 <parent> 标签复用父项目配置,减少重复。
  • 聚合:多模块项目中,通过 <modules> 定义子模块,统一构建。