Maven

为啥使用 Maven

  • jar 包管理(添加、获取、自动处理 jar 包依赖关系及冲突)
    手动 jar 包管理很麻烦,需要自行到网上下载 jar 包,添加到项目的 lib 目录生效(Maven 只需要添加到 pom 即可);如果一个 jar 包又依赖很多其他 jar 包,又得手动找很多个(Maven 能自动下载);如果项目 A 依赖 B,B 依赖 C,且 B 和 C 依赖同一个 xxx.jar,但版本不同,那么项目 A 依赖哪个版本呢?冲突(Maven 会自动处理冲突,最短路径者优先);如果项目 A 依赖 B 和 C,且 B 和 C 依赖同一个 xxx.jar,但版本不同,那么项目 A 依赖哪个版本呢?冲突(Maven 会自动处理冲突,先声明者优先)
  • 项目模块化管理
  • 项目自动化构建(查看生命周期,清理-编译-打包-……)

Maven 使用

安装

下载压缩包,解压并配置环境变量即可!注意 Maven 是 Java 开发的,依赖 JDK。

配置(conf/settings.xml)

本地仓库

<localRepository>/path/to/local/repo</localRepository>

镜像仓库,把国外的仓库 jar 包复制一份到国内(提速),如下阿里云镜像仓库

<mirror>
    <id>nexus-aliyun</id>
    <mirrorOf>central</mirrorOf>
    <name>Nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

idea 集成 Maven

在这里插入图片描述

Lifecycle

常见命令(可点击下面各命令,也可以在控制台执行 mvn 下面各命令)
在这里插入图片描述
clean:清除之前编译好的东西,target 包
validate:检验项目目录结构是否正确
compile:编译(main 目录里的)
test:编译并运行测试包下的内容
package:打包
install:安装到本地仓库

Maven 核心概念

pom

Project Object Model:项目对象模型,将 Java 工程的相关信息封装为对象作为便于操作和管理的模型。

约定的目录结构

约定 > 配置 > 编码(思想),比如 Springboot 提供大量默认配置(约定),大幅度减少配置量(配置文件报错难以定位),提高开发速度。
在这里插入图片描述

坐标

确定 Maven 仓库中唯一确定的 jar 包
groupId:公司域名倒序 + 项目名称
artifactId:项目的模块名称
version:模块的版本

依赖生效范围

compile:(默认)main 和 test 目录下的代码都可以使用,部署到 Tomcat 服务器上运行时该 jar 包放在 WEB-INF 的 lib 目录下
test:仅 test 目录下的代码可以使用,部署到 Tomcat 服务器上运行时该 jar 包不会放在 WEB-INF 的 lib 目录下
provided:main 和 test 目录下的代码都可以使用,部署到 Tomcat 服务器上运行时该 jar 包不会放在 WEB-INF 的 lib 目录下(原因是,比如 Tomcat 自带的 jar 包,像 servlet)

compile:编译 classpath + 测试 classpath + 运行 classpath
test:测试 classpath
provided:编译 classpath + 测试 classpath
runtime:测试 classpath + 运行 classpath

依赖的传递

如果项目 A 依赖 B,B 依赖 C,也就是 A 间接依赖 C,A 可以访问到 C 中 compile 的依赖包,C 中 test/provided 的依赖包对 A 不可见

依赖的排除
<dependency>
    <groupId>xxx.xxx.project</groupId>
    <artifactId>module</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!--依赖排除-->
    <exclusions>
        <exclusion>
            <groupId>xxx</groupId>
            <artifactId>xxx</artifactId>
        </exclusion>
    </exclusions>
</dependency>

统一管理 jar 包版本
<properties>
    <spring.version>2.0.0.RELEASE</spring.version>
</properties>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>${spring.version}</version>
</dependency>

继承

父工程的打包方式为 pom,删除 src 目录

<groupId>xxx</groupId>
<artifactId>Parent</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>

父工程统一管理 jar 包版本,子工程中也要引入相应 jar 包,不用写版本,若写版本会覆盖掉父工程对应的版本。如果不用 dependencyManagement,子工程不用引入对应的包就行!

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>xxx</groupId>
            <artifactId>xxx</artifactId>
            <version>1.0</version>
            <scope>xxx</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<modules>
    <module>子工程1</module>
    <module>子工程2</module>
</modules>

子工程

<parent>
    <groupId>xxx</groupId>
    <artifactId>Parent</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值