[Maven] 笔记

Maven

管理和构建 Java 项目的工具,同类的还有 Gradle、Ant 等

提供了什么:

  • 标准化的项目结构
  • 标准化的构建流程
    • 编译 > 测试 > 打包 > 发布
  • 依赖管理机制

标准项目结构

img

更快捷的编译,打包

依赖管理机制

直接在 pom.xml 中添加依赖坐标后会自动将 jar 包和插件部署在 lib 中

不再需要曾经的(下载,导入lib,添加到工作环境)繁琐步骤

img


Maven 内部控制机制

img

通过在 pom 文件中编辑项目所用的外部库,让 maven 去仓库找到 jar 包导入项目

仓库有:本地仓库、apache 中央仓库、远程仓库(类似私服的概念)

当项目中使用坐标引入对应依赖jar包后,首先会查找本地仓库中是否有对应的 jar 包:

  • 如果有,则在项目直接引用;
  • 如果没有,则去中央仓库中下载对应的 jar 包到本地仓库。

如果搭建了远程仓库,则访问顺序为:

本地仓库>远程仓库>中央仓库

发现远程仓库没有,会从中央仓库下载到远程仓库之后,再下载到本地仓库


配置和命令

在 /conf/setting.xml 中

本地仓库

<localRepository>D:\Work\Environment\maven-repository</localRepository>

配置远程仓库

 <!-- 阿里云仓库 -->
<mirror>
    <id>alimaven</id>
    <mirrorOf>central</mirrorOf>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>

常见命令

命令 功能
mvn compile 编译生成再target中
mvn clean 清除编译文件
mvn package 打包(jar,war)
mvn test 运行测试
mvn install 把生成的包放入本地仓库

三套生命周期

img

同一生命周期内,执行后边的命令,会先自动执行前面的命令

比如 compile > test > package > install 这一套中

执行 mvn install 会自动执行 compile > test > package


Maven 坐标

  • groupld:定义当前Maven项目隶属组织名称(通常是域名反写,例如: com.itheima)
  • artifactld:定义当前Maven项目名称(通常是模块名称,例如order-service、goods-service)
  • version:定义当前项目版本号
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.13</version>
</dependency>

依赖作用范围

<!-- 编译时有效 -->
<scope>compile</scope>
<!-- 测试环境有效 -->
<scope>test</scope>
<!-- 测试和运行环境有效 -->
<scope>runtime</scope>
<!-- 编译和测试有效,运行无效,打包时不会包含 -->
<scope>provided</scope>
<!-- 编译和测试有效,运行无效 -->
<scope>system</scope>

常见的 servlet 作用范围,设置为 provided 避免和 Tomcat 发生冲突

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>
posted @ 2023-04-08 10:25  李八御  阅读(22)  评论(0)    收藏  举报