Maven 基础

news/2024/11/29 7:38:01/

1.1 简介

概念:Maven 的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POW);

  1. Maven是用 Java 语言编写的。他管理的东西统统以面向对象的形式进行设计,最终他把一个项目看成一个对象,而这个对象叫做POM(project object model),即项目对象模型
  2. Maven 的作用有三个:
  1. 项目构建:提供标准的,跨平台的自动化构建项目的方式;
  2. 依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突等问题;
  3. 统一开发结构:提供标准的,统一的项目开发结构;

1.2 仓库

概念Maven 仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库,用于存储各种资源,包含各种 jar 包;

Maven 仓库有三种类型:

  • 本地仓库:本地仓库是自己电脑上存储资源的仓库,在第一次执行 maven 命令的时候被创建,Maven 所需要的构建是直接从本地仓库进行获取的,如果本地仓库没有,它会连接远程仓库获取资源下载至本地仓库;
  • 中央仓库:中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库,中央仓库包含了绝大多数的开源 Java 构件(不能存储具有版权的资源),由 Maven 团队维护,需要网络才能访问;
  • 私服: 部门或公司范围内存储资源的仓库,用于保存购买的、自主研发的 jar ,仅对内部开放,不对外部开放;

1.3 坐标

概念:Maven 坐标用于描述仓库中资源的位置;

组成

  1. 组织 ID ( groupId ):定义当前 Maven 项目隶属组织名称(通常是域名反写,例如:org.mybatis );
  2. 项目 ID ( artifactId ):定义当前 Maven 项目名称;
  3. 版本号(version):定义当前项目版本号;

作用:坐标是唯一标识,用于唯一位置定位;

资源坐标查询网站:https://mvnrepository.com/

1.4 基本项目构建命令

  • Maven 构建命令使用 mvn 开头,后面添加功能参数,可以用空格分隔一次性执行多个命令:
//编译
mvn compile
//清理
mvn clean
//测试
mvn test
//打包
mvn package
//安装到本地仓库
mvn install

1.5 pom 文件

常用标签:

  • dependencies:设置当前项目所依赖的所有 jar;
  • dependency:设置具体的依赖;
  • optional:可选依赖;
  • exclusions:排除依赖;
  • scope:依赖范围;
  • groupId:所属的项目包;
  • artifactId:所属项目 id ;
  • packaging:打包格式( java 项目为 jar ,web 项目为 war );
  • version:版本号;
  • build:配置;
  • plugins:设置当前项目所依赖的所有插件;
  • plugin:设置具体的插件;
  • configuration:设置当前插件的配置、构造;
  • port:端口号;
  • path:路径;

示例:

<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"><!-- 当前 pom 版本号 --><modelVersion>4.0.0</modelVersion><!-- 项目包名 --><groupId>com.caterpillar</groupId><!-- 项目名称 --><artifactId>web01</artifactId><!-- 打包格式 --><packaging>war</packaging><!-- 项目版本号 --><version>1.0-SNAPSHOT</version><!-- maven名称 --><name>web01 Maven Webapp</name><!-- maven坐标 --><url>http://maven.apache.org</url><!-- 所有依赖 --><dependencies><!--  具体依赖  --><dependency><!--  依赖包名  --><groupId>junit</groupId><!-- 依赖名称 --><artifactId>junit</artifactId><!-- 依赖版本 --><version>4.12</version><!-- 可选依赖 --><optional>true</optional><!-- 依赖范围 --><scope>test</scope></dependency><dependency><groupId>com.caterpillar</groupId><artifactId>java01</artifactId><version>1.0-SNAPSHOT</version><!-- 所有需去除依赖 --><exclusions><!-- 具体需去除依赖 --><exclusion><groupId>junit</groupId><artifactId>junit</artifactId></exclusion></exclusions></dependency></dependencies><!-- 配置 --><build><!-- 所有插件 --><plugins><!-- 具体插件 --><plugin><!-- 插件包名 --><groupId>org.apache.tomcat.maven</groupId><!-- 插件名称 --><artifactId>tomcat7-maven-plugin</artifactId><!-- 插件版本 --><version>2.1</version><!-- 构造 --><configuration><!-- 端口 --><port>80</port><!-- 路径 --><path>/</path></configuration></plugin></plugins></build>
</project>

依赖:

  1. 传递性
  • 在当前项目中通过 pom 文件建立的依赖关系叫做直接依赖;
  • 在当前项目的依赖中依赖其他项目,会继承被依赖项目的依赖;
  1. 依赖传递冲突问题

在依赖传递的情况下,出现依赖同一个名称但实际不为同一资源时称为依赖传递冲突问题;

依赖的优先级

  • 路径优先:层级越深,优先级越低,层级越浅优先级越高;
  • 声明优先:配置顺序靠前的覆盖配置顺序靠后的;
  • 特殊优先:为相同资源的不同版本情况下后配置的覆盖先配置的;
  1. 依赖范围

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

作用范围
> > > > > > > > > >
scope主代码测试代码打包
compile(默认)可用可用可用
test不可用可用不可用
provided可用可用不可用
runtime不可用不可用可用

1.6 生命周期

maven 对项目构建的生命周期分为 3 套:

  1. clean:清理工作
  • pre-clean:执行一些需要在 clean 之前完成的工作;
  • clean:移除上一次构建所生成的文件;
  • post-clean:执行一些需要在 clean 之后执行的工作;
  1. defaule:核心工作

主要有:

  • compile:编译
  • test-compile:编译测试源码
  • test:测试
  • package:打包
  • install:安装
  1. site:产生报告
  • pre-site:执行一些要在生成站点文档之前完成的工作;
  • site:生成项目的站点文档;
  • post-site:执行一些在站点文档之后完成的工作,并且为部署做准备;
  • site-deploy:将生成的站点文档部署到特定的服务器上;

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

相关文章

6 GHz频段IMT系统对卫星固定业务干扰分析

【摘 要】6 GHz作为移动宽带发展频谱使用有利于全球5G产业持续健康发展,为满足6 GHz频段国际移动通信(IMT)系统的使用需求,需要开展6 GHz频段下IMT与同频卫星固定(地对空)业务频谱共存研究,以保护该频段的卫星固定(地对空)业务的正常工作。首先分析IMT系统对卫星固定…

RK3568平台开发系列讲解(摄像头篇)使用 Camera 的步骤

🚀返回专栏总目录 文章目录 一、使用 Camera 的步骤二、使用 SurfaceView 预览显示 Camera 数据沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 本篇将介绍如何使用Camera。 一、使用 Camera 的步骤 说下 Camera 的操作步骤,后面给出实例,请结合代码理解分析: 获…

从零开始搭建Vue3.0项目

从零开始搭建Vue3.0项目所使用的软件及工具&#xff0c;环境1.确保本机已安装nodejs和npm2.Vue-cli项目搭建所使用的软件及工具&#xff0c;环境 软件vscode&#xff1a; vscode地址下载&#xff0c; svn集中式管理&#xff1a; 是一个开源的代码版本控制系统&#xff0c;用于…

【力扣】423.从英文中重建数字

423. 从英文中重建数字 | 2022-12-15 我想先统计每个字母出现次数&#xff0c;然后遍历需重建的单词&#xff0c;单词需要什么字母作为原材料&#xff0c;就直接取什么。于是下面代码的复杂性基于这样一个问题&#xff1a; 如果我们打算先重建单词one&#xff0c;建到建不出来…

SpringBoot+Vue实现前后端分离的小而学在线考试系统

文末获取源码 开发语言&#xff1a;Java 使用框架&#xff1a;spring boot 前端技术&#xff1a;JavaScript、Vue.js 、css3 开发工具&#xff1a;IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库&#xff1a;MySQL 5.7/8.0 数据库管理工具&#xff1a;phpstudy/Navicat JD…

MicroPython-On-ESP8266——8x8LED点阵模块(5)自制贪吃蛇游戏

MicroPython-On-ESP8266——8x8LED点阵模块&#xff08;5&#xff09;自制贪吃蛇游戏 1. 背景知识 连续折腾了一段时间的8x8点阵屏模块&#xff0c;从基本原理到驱动它显示滚动图案效果&#xff0c;常用的功能都使用到了。系列如下&#xff1a; MicroPython-On-ESP8266——8…

大数据课设

----------------------------------------------------------------------------------------------------------------------------- 由于本人主修嵌入式方向最多使用的就是C语言&#xff0c;由于物联网这个专业的特殊性&#xff0c;javaweb没少 写&#xff0c;所以java也用…

Spring Boot 3.x微服务升级经历

前言 Spring Boot 3.0.0 GA版已经发布&#xff0c;好多人也开始尝试升级&#xff0c;有人测试升级后&#xff0c;启动速度确实快了不少&#xff0c;如下为网络截图&#xff0c;于是我也按捺不住的想尝试下。 历程 首先就是要把Spring Boot、Spring Cloud 相关的依赖升一下 …