maven进阶

文章目录

  • 1.pom.xml文件
    • 1.1定义:
    • 1.2文件的构成
      • [1.2.1 基本信息](#1.2.1 基本信息)
      • [1.2.2 打包类型(Packaging)](#1.2.2 打包类型(Packaging))
      • [1.2.3 父项目(Parent)](#1.2.3 父项目(Parent))
      • [1.2.4 依赖管理(Dependencies & Dependency Management)](#1.2.4 依赖管理(Dependencies & Dependency Management))
      • [1.2.5 模块(Modules)](#1.2.5 模块(Modules))
      • [1.2.6 构建配置(Build)](#1.2.6 构建配置(Build))
      • [1.2.7 仓库配置(Repositories & Distribution Management)](#1.2.7 仓库配置(Repositories & Distribution Management))
      • [1.2.8 其他配置](#1.2.8 其他配置)
    • [1.3 坐标](#1.3 坐标)
      • [1.3.1 坐标的概念](#1.3.1 坐标的概念)
      • [1.3.2 坐标的意义](#1.3.2 坐标的意义)
      • [1.3.3 坐标的含义](#1.3.3 坐标的含义)
    • [1.4 依赖](#1.4 依赖)
      • [1.4.1 依赖的意义](#1.4.1 依赖的意义)
      • [1.4.2 依赖的范围](#1.4.2 依赖的范围)
      • [1.4.3 依赖传递和可选依赖](#1.4.3 依赖传递和可选依赖)
    • [1.5 仓库](#1.5 仓库)
      • [1.5.1 概念](#1.5.1 概念)

1.pom.xml文件

1.1定义:

pom.xml(Project Object Model,项目对象模型)是 Maven 项目的核心配置文件,用于定义项目的基本信息、依赖、构建规则、插件等,是 Maven 实现自动化构建和依赖管理的基础

1.2文件的构成

1.2.1 基本信息

定义项目的唯一标识,用于在 Maven 仓库中定位项目(自身或依赖),是 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">
    <!-- POM 模型版本(固定为 4.0.0,当前最新版本) -->
    <modelVersion>4.0.0</modelVersion>

    <!-- 项目唯一标识三要素(GAV) -->
    <groupId>com.example</groupId>   <!-- 组织/公司标识(如域名反转) -->
    <artifactId>my-project</artifactId> <!-- 项目/模块名称 -->
    <version>1.0.0</version>         <!-- 项目版本(如 SNAPSHOT 表示快照版) -->

    <!-- 可选:项目名称、描述、URL 等 -->
    <name>My Project</name>
    <description>A sample Maven project</description>
    <url>https://example.com/my-project</url>
</project>

1.2.2 打包类型(Packaging)

指定项目的打包格式,默认值为 jar,常用类型:

jar:普通 Java 项目,打包为 JAR 文件;

war:Web 项目,打包为 WAR 文件;

pom:父项目或聚合项目,用于统一管理子模块依赖或配置。

复制代码
<packaging>war</packaging>

1.2.3 父项目(Parent)

用于继承父 POM 的配置(如依赖、插件),实现配置复用(类似 Java 继承)。

复制代码
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.0</version>
    <!-- 可选:父 POM 相对路径(默认从仓库查找) -->
    <relativePath/>
</parent>

1.2.4 依赖管理(Dependencies & Dependency Management)

dependencies:声明项目直接依赖的库(JAR 包等),Maven 会自动从仓库下载,并处理传递依赖(依赖的依赖)。

复制代码
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <!-- 版本可省略(若父 POM 中已通过 dependencyManagement 声明) -->
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
        <scope>test</scope> <!-- 依赖范围(如 test 表示仅测试时生效) -->
    </dependency>
</dependencies>

1.2.5 模块(Modules)

用于聚合多个子模块(多模块项目),父项目的 packaging 需设为 pom,执行 Maven 命令时会自动递归处理所有子模块。

复制代码
<modules>
    <module>module-1</module> <!-- 子模块目录名 -->
    <module>module-2</module>
</modules>

1.2.6 构建配置(Build)

定义项目构建规则,包括源码目录、输出目录、插件配置等。

复制代码
<build>
    <!-- 项目最终打包名称(默认:artifactId-version) -->
    <finalName>my-app</finalName>

    <!-- 源码/资源目录配置(默认已约定,可自定义) -->
    <sourceDirectory>src/main/java</sourceDirectory>
    <testSourceDirectory>src/test/java</testSourceDirectory>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
        </resource>
    </resources>

    <!-- 插件配置:扩展 Maven 功能(如编译、打包、测试等) -->
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>1.8</source> <!-- 源代码兼容版本 -->
                <target>1.8</target> <!-- 编译后 class 文件版本 -->
            </configuration>
        </plugin>
    </plugins>
</build>

1.2.7 仓库配置(Repositories & Distribution Management)

repositories:指定依赖下载的仓库地址(默认从 Maven 中央仓库下载,可添加私有仓库)

复制代码
<repositories>
    <repository>
        <id>aliyun</id>
        <url>https://maven.aliyun.com/repository/public</url>
    </repository>
</repositories>

distributionManagement:配置项目部署的远程仓库(执行 mvn deploy 时使用),供团队共享。

复制代码
<distributionManagement>
    <repository>
        <id>my-release-repo</id>
        <url>https://repo.example.com/releases</url>
    </repository>
    <snapshotRepository>
        <id>my-snapshot-repo</id>
        <url>https://repo.example.com/snapshots</url>
    </snapshotRepository>
</distributionManagement>

1.2.8 其他配置

properties:定义全局属性(如版本号、编码等),通过 ${属性名} 引用,便于统一维护。

复制代码
<properties>
    <java.version>1.8</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

profiles:定义不同环境的配置(如开发、测试、生产),通过 -P 环境名 激活,实现环境隔离。

复制代码
<profiles>
    <profile>
        <id>dev</id>
        <properties>
            <env>development</env>
        </properties>
    </profile>
</profiles>

1.3 坐标

1.3.1 坐标的概念

在 Maven 中坐标是构件的唯一标识,Maven 坐标的元素包括 groupId、

artifactId、version、packaging、classifier。上述 5 个元素中,groupId、

artifactId、version 是必须定义的,packaging 是可选的 ( 默认为 jar )。

1.3.2 坐标的意义

Maven世界拥有大量构建,我们需要找一个用来唯一标识一个构建的统一规范

拥有了统一规范,就可以把查找工作交给机器

1.3.3 坐标的含义

groupId:组织标识,一般为:公司网址的反写+项目名

artifactId:项目名称,一般为:项目名-模块名

version:版本号 形式为0.0.1-SNAPSHOT:

第一个 0 表示大版本号,第二个 0 表示分支版本号,第三个 0 表示小

版本号

SNAPSHOT-- 快照版本,ALPHA-- 内侧版本,BETA-- 公测版本,

RELEASE-- 稳定版本,GA-- 正式发布

packaging:打包的方式,如:pom, jar, maven-plugin, ejb, war, ...

clissifier:用来帮助定义构件输出的一些附属构件。

1.4 依赖

1.4.1 依赖的意义

在写Java项目时,随着项目的进行,所需要的依赖会越来越多,而且项目引用的依赖也有可能会依赖其他依赖,所以为了简便项目依赖管理,使用maven进行管理,简化项目的依赖管理

1.4.2 依赖的范围

Maven 项目在开发工程中有三套classpath

主代码:main下面的都是主代码在编译的时候的依赖

测试代码:test下是测试代码编译的时候的依赖

运行时:main代码在运行的时候对包的依赖

共 6 种 scope,包括:compile、provided、runtime、test、system、import。

例如上图的junit,只在测试中使用,则选择test即可,默认为compile

1.4.3 依赖传递和可选依赖

依赖传递:例:

第一直接依赖: HelloFriend项目依赖Hello项目

第二直接依赖: MakeFriend项目依赖HelloFriend项目

依赖阻断(在被引用的项目中写):

可选依赖(在需要引用其他依赖的项目中写):

1.5 仓库

1.5.1 概念

Maven 仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库。

仓库的类型有:

本地(local)

中央(central)

远程(remote)

相关推荐
豐儀麟阁贵3 小时前
5.5类的主方法
java·开发语言
智海观潮3 小时前
聊聊Spark的分区
java·大数据·spark
rengang663 小时前
020-Spring AI Alibaba DashScope Image 功能完整案例
java·人工智能·spring·spring ai·ai应用编程
-Initiation3 小时前
数据库的安全与保护(下)
java·数据库·oracle
看今朝·3 小时前
【Dash框架】Dash回调函数中Output的属性详解
java·前端·dash
eguid_14 小时前
【HLS】Java实现统计HLS的m3u8清单中所有ts切片的视频持续时长
java·音视频·hls·1024程序员节·m3u8·ts时长
洋就在江州4 小时前
jeecgboot 使用apache poi excel导入带图片
java·apache·excel
Scigar4 小时前
Idea的安装以及基础使用
java·intellij-idea·idea
寒山李白4 小时前
IntelliJ IDEA新版下载、安装、创建项目及Maven配置的教程(附安装包等)
java·maven·intellij-idea