Maven基础篇

news/2024/12/29 21:17:51/

Maven基本概念

Maven是什么

maven的本质是一个项目管理工程,将项目开发和管理过程抽象成一个项目对象模型(POM)

POM(Project Object Model):项目对象模型

img

作用

  • 项目构建:提供标准的、跨平台的自动化项目构建方式
  • 依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突问题
  • 统一开发结构:提供标准的、统一的项目结构

配置与安装

请跳转到:Maven介绍及配置过程_没办法,我就是这么菜的博客-CSDN博客

仓库

仓库:用于存储资源,包含各种jar包

仓库分类:

  • 本地仓库:自己电脑上存储资源的仓库,连接远程仓库获取资源
  • 远程仓库:非本机电脑上的仓库,为本地仓库提供资源
    • 中央仓库:Maven团队维护,存储所有资源的仓库
    • 私服:部门/公司范围内存储资源的仓库,从中央仓库获取资源
  • 私服的作用:
    • 保存具有版权的资源,包含购买或自主研发的jar
      • 中央仓库中的jar都是开源的,不能存储具有版权的资源
    • 一定范围内共享资源,仅对内部开放,不对外共享

坐标

什么是坐标

Maven中的坐标用于描述仓库中资源的位置

主要组成

groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如:org.mybatis)

artifactId:定义当前Maven项目名称(通常是模块名称,例如CRM、SMS)

version:定义当前项目版本号

packing:定义该项目的打包方式

作用

使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的识别与下载工作交由机器完成

仓库配置

本地仓库配置

Maven启动后,会自动保存下载的资源到本地仓库

  • 默认位置

    <localRepository>${user.home}/.m2/repository</localRepository>
    

    当前目录位置为登录用户名所在目录下的.m2文件夹中

  • 自定义位置

    <localRespository>D:\maven\repository</localRespository>
    

    当前位置为D:\maven\repository文件夹中

远程仓库配置

Maven默认连接的仓库位置

<repositories><repository><id>central</id><name>Central Repository</name><url>https://repo.maven.apache.org/maven2</url>       <layout>default</layout>        <snapshots><enabled>false</enabled></snapshots> 			     </repository>
</repositories>

镜像仓库配置

在setting文件中配置阿里云镜像仓库

<mirrors><!--配置具体的仓库的下载镜像--><mirror><!--此镜像的唯一标识符,用来区分不同的mirror元素--><id>nexus-aliyun</id><!--对哪种仓库进行镜像,简单说就是替代哪个仓库--><mirrorOf>central</mirrorOf><!--镜像名称--><name>Nexus aliyun</name><!-- 镜像URL --><url>http://maven.aliyun.com/nexus/content/groups/public</url></mirror>
</mirrors>

全局setting与用户setting区别

  • 全局setting定义了当前计算器中Maven的公共配置
  • 用户setting定义了当前用户的配置

第一个Maven项目

Maven工程目录结构

在src同层目录下创建pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.itheima</groupId><artifactId>project-java</artifactId><version>1.0</version><packaging>jar</packaging><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency></dependencies>
</project>

Maven项目构建命令

Maven构建命令使用mvn开头,后面添加功能参数,可以一次执行多个命令,使用空格分隔

mvn compile #编译

mvn clean #清理

mvn test #测试

mvn package #打包

mvn install #安装到本地仓库

插件创建工程

创建工程

mvn archetype:generate

​ -DgroupId={project-packaging}

​ -DartifactId={project-name}

​ -DarchetypeArtifactId=maven-archetype-quickstart

​ -DinteractiveMode=false

创建Java工程

mvn archetype:generate -DgroupId=com.dc -DartifactId=java-project -DarchetypeArtifactId=maven-archetype-quickstart -Dversion=0.0.1-snapshot -DinteractiveMode=false

创建web工程

mvn archetype:generate -DgroupId=com.dc -DartifactId=web-project -DarchetypeArtifactId=maven-archetype=webapp -Dversion=0.0.1-snapshot -DinteractiveMode=false

Maven工程目录结构

img

依赖管理

依赖配置

依赖指当前项目运行所需的jar,一个项目可以设置多个依赖

格式:

<!--设置当前项目所依赖的所有jar-->
<dependencies><!—设置具体的依赖--><dependency><!—依赖所属群组id--><groupId>junit</groupId><!—依赖所属项目id--><artifactId>junit</artifactId><!—依赖版本号--><version>4.12</version></dependency>
</dependencies>

依赖传递

依赖具有传递性

  • 直接依赖:在当前项目中通过依赖配置建立的依赖关系
  • 间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源

依赖传递冲突问题

路径优先:当依赖当中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高

声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的

特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的

可选依赖

可选依赖指对外隐藏当前所依赖的资源–不透明

<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><optional>true</optional>
</dependency>

排除依赖

排除依赖指主动断开依赖的资源,被排除的资源无需指定版本–不需要

<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><exclusions><exclusion><groupId>org.hamcrest</groupId><artifactId>hamcrest-core</artifactId></exclusion></exclusions>
</dependency>

依赖范围

依赖的jar默认情况可以在任何地方使用,可以通过scope标签设定其作用范围

作用范围:

  • 主程序范围有效(main文件夹范围内)
  • 测试程序范围有效(test文件夹范围内)
  • 是否参与打包(package指令范围内)
scope主代码测试代码打包范例
complie(默认)log4j
testjunit
providedservlet-api
runtimejdbc

依赖范围传递性

带有依赖范围的资源在进行传递时,作用范围将受到影响

compiletestprovidedruntime
compilecompiletestprovidedruntime
test
provided
runtimeruntimetestprovidedruntime

生命周期与插件

项目构建声明周期

Maven构建声明周期描述的是一次构建过程中经历了多少个事件

img

Maven对项目构建的生命周期划分为3套
  • clean:清理工作
  • default:核心工作,例如编译,测试,打包,部署等
  • site:产生报告,发布站点等
clean生命周期
  • pre-clean:执行一些需要在clean之前完成的工作
  • clean:移除所有上一次构建生成的文件
  • post-clean:执行一些需要在clean之后立刻完成的工作
defaul构建生命周期
  • validate(校验):校验项目是否正确并且所有必要的信息可以完成项目的构建过程。
  • initialize(初始化):初始化构建状态,比如设置属性值。
  • generate-sources(生成源代码):生成包含在编译阶段中的任何源代码。
  • process-sources(处理源代码):处理源代码,比如说,过滤任意值。
  • generate-resources(生成资源文件):生成将会包含在项目包中的资源文件。
  • process-resources(处理资源文件):复制和处理资源到目标目录,为打包阶段最好准备。
  • compile(编译):编译项目的源代码。
  • process-classes(处理类文件):处理编译生成的文件,比如说对Java class文件做字节码改善优化。
  • generate-test-sources(生成测试源代码):生成包含在编译阶段中的任何测试源代码。
  • process-test-sources(处理测试源代码):处理测试源代码,比如说,过滤任意值。
  • generate-test-resources(生成测试资源文件):为测试创建资源文件。
  • process-test-resources(处理测试资源文件):复制和处理测试资源到目标目录。
  • test-compile(编译测试源码):编译测试源代码到测试目标目录
  • process-test-classes(处理测试类文件):处理测试源码编译生成的文件。
  • test(测试):使用合适的单元测试框架运行测试(Juint是其中之一)。
  • prepare-package(准备打包):在实际打包之前,执行任何的必要的操作为打包做准备。
  • package(打包):将编译后的代码打包成可分发格式的文件,比如JAR、WAR或者EAR文件。
  • pre-integration-test(集成测试前):在执行集成测试前进行必要的动作。比如说,搭建需要的环境。
  • integration-test(集成测试):处理和部署项目到可以运行集成测试环境中。
  • post-integration-test(集成测试后):在执行集成测试完成后进行必要的动作。比如说,清理集成测试环境。
  • verify (验证):运行任意的检查来验证项目包有效且达到质量标准。
  • install(安装):安装项目包到本地仓库,这样项目包可以用作其他本地项目的依赖。
  • deploy(部署):将最终的项目包复制到远程仓库中与其他开发者和项目共享
site构建生命周期
  • pre-site:执行一些需要在生成站点文档之前完成的工作
  • site:生成项目的站点文档
  • post-site:执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
  • site-deploy:将生成的站点文件部署到特定的服务器上

插件

  • 插件与生命周期的阶段绑定,在执行到对应生命周期时执行对应的插件功能
  • 默认maven在各个生命周期上绑定有预设的功能
    • 通过插件可以自定义其他功能
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-source-plugin</artifactId><version>2.2.1</version><executions><execution><goals><goal>jar</goal></goals><phase>generate-test-resources</phase></execution></executions></plugin></plugins>
</build>

img


http://www.ppmy.cn/news/69487.html

相关文章

Spring IOC 原理以及实现源码分析

前言 在 Spring 程序设计中&#xff0c;IOC (Inversion of Control) 即控制反转是一个重要的概念&#xff0c;它是 Spring 框架的核心机制之一&#xff0c;在程序中广泛使用。本文将会对 Spring IOC 的概念、实现原理和源码进行详细的解析。 控制反转&#xff08;IoC&#xff…

在外远程NAS群晖Drive - 群晖Drive挂载电脑磁盘同步备份【无需公网IP】

文章目录 前言1.群晖Synology Drive套件的安装1.1 安装Synology Drive套件1.2 设置Synology Drive套件1.3 局域网内电脑测试和使用 2.使用cpolar远程访问内网Synology Drive2.1 Cpolar云端设置2.2 Cpolar本地设置2.3 测试和使用 3. 结语 转发自CSDN远程穿透的文章&#xff1a;【…

AI题目整理

文章目录 1、网络配置时batchsize的大小怎样设置?过小和过大分别有什么特点?2、设置学习率衰减的原因?3、有哪些分类算法?4、分类和回归的区别?5、请描述一下K-means聚类的过程?6、训练集、测试集、验证集的作用?7、请讲解一下k折交叉验证?8、分类和聚类的区别?9、讲述…

图像分割(Segmentation)

文章目录 图像分割FCNU-NetSegNetDeepLab图像分割常用数据集 图像分割 图像分割是预测图像中每一个像素所属的类别或者物体。基于深度学习的图像分割算法主要分为两类&#xff1a; 语义分割&#xff08;Semantic Segmentation&#xff09; 为图像中的每个像素分配一个类别。 …

瑞吉外卖 - 项目介绍(1)

某马瑞吉外卖单体架构项目完整开发文档&#xff0c;基于 Spring Boot 2.7.11 JDK 11。预计 5 月 20 日前更新完成&#xff0c;有需要的胖友记得一键三连&#xff0c;关注主页 “瑞吉外卖” 专栏获取最新文章。 相关资料&#xff1a;https://pan.baidu.com/s/1rO1Vytcp67mcw-PD…

【ROS2知识】用Robot Localization包进行传感器融合

目录 一、说明 二、Robot Localization包概述 2.1 卡尔曼滤波模型 三、Robot Localization包安装配置 3.2 安装Robot Localizat

C++/Qt 小知识记录3

工作中遇到的一些小问题&#xff0c;总结的小知识记录&#xff1a;C/Qt 小知识 QLineEdit限制输入大于0的正整数QLayout内清空已布局的WidgetWindows结束进程直接结束&#xff0c;子进程不响应结束事件正常结束&#xff0c;子进程响应结束事件 CMake关闭控制台Console实体与值对…

Bean基础配置?实例化方式?生命周期?

文章目录 1 bean基础配置1.1 bean基础配置(id与class) 1 bean基础配置1.1 bean基础配置(id与class)1.2 bean的name属性1.2 bean的name属性步骤1&#xff1a;配置别名步骤2: 根据名称容器中获取bean对象步骤3: 运行程序 1.3 bean作用范围scope配置(单例/非单例)1.3.1 验证IOC容器…