Maven 整理(含面试题)

Maven是Java 项目必备,Maven 主要服务于基于Java平台的项目构建、依赖管理和项目信息管理。项目构建工具 、更好的管理依赖

目录

  • Maven安装与运行
  • maven 重要知识点
  • 面试题

Maven安装与运行

Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。
进入maven官网进行下载 https://maven.apache.org/download.cgi maven
在这里插入图片描述
下载解压后,创建环境变量:
M2_HOME
在这里插入图片描述
MAVEN_HOME
在这里插入图片描述
在Path环境变量中添加:
在这里插入图片描述
注意环境中要有jdk环境,
在这里插入图片描述
创建仓库,文件名可以如下:
在这里插入图片描述
进入conf文件,进行settings.xml配置,需要添加此本地仓库包。
在这里插入图片描述
配置阿里云镜像:
在这里插入图片描述

<mirrors><!-- 阿里云镜像 --><mirror><id>alimaven</id><mirrorOf>central</mirrorOf><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/repositories/central/</url>#或者这个url : https://maven.aliyun.com/repository/public</mirror></mirrors>

配置jdk环境:
在这里插入图片描述

<!-- 配置 java 版本 --><profile><id>jdk-1.8</id><activation><activeByDefault>true</activeByDefault><jdk>1.8</jdk></activation><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion></properties></profile>

在这里插入图片描述

在这里插入图片描述
如果建的时候会报错:
No archetype found in remote catalog. Defaulting to internal catalog

在这里插入图片描述
在setting里面设置:
-DarchetypeCatalog=internal
在这里插入图片描述
这样子就可以了,重启idea,对maven进行重载入。
在这里插入图片描述
运行一下,需要配置tomcat:
在这里插入图片描述
在这里插入图片描述
当然可以使用命令进行创建:

mvn archetype:generate "-DgroupId=com.companyname.bank" "-DartifactId=consumerBanking" "-DarchetypeArtifactId=maven-archetype-quickstart" "-DinteractiveMode=false"

maven 重要知识点

Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。
Maven 主要服务于基于Java平台的项目构建、依赖管理和项目信息管理。
项目构建工具 、更好的管理依赖
Maven 的主要功能主要分为5点:依赖管理系统,多模块构建,一致的项目结构,一致的构建模型和插件机制。
文件创建格式信息:
在这里插入图片描述
在这里插入图片描述
POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。执行任务或目标时,Maven 会在当前目录中查找 POM。

<!-- 模型版本 --><modelVersion>4.0.0</modelVersion><!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如com.companyname.project-group,maven会将该项目打成的jar包放本地路径:/com/companyname/project-group --><groupId>com.companyname.project-group</groupId><!-- 项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 --><artifactId>project</artifactId><!-- 版本号 --><version>1.0</version>

在这里插入图片描述
Maven 有以下三个标准的生命周期

clean:项目清理的处理 ,删除项目中已经编译好的信息,删除target目录
default(或 build):项目部署的处理
site:项目站点文档创建的处理
Default 生命周期(也称为 Build 生命周期)
在这里插入图片描述
1)validate:验证工程是否正确,所有需要的资源是否可用。
2)compile:编译项目的源代码。
3)test:使用合适的单元测试框架来测试已编译的源代码。这些测试不需要已打包和布署。
4)Package:把已编译的代码打包成可发布的格式,比如jar。
5)integration-test:如有需要,将包处理和发布到一个能够进行集成测试的环境。
6)verify:运行所有检查,验证包是否有效且达到质量标准。
7)install:把包安装到maven本地仓库,可以被其他工程作为依赖来使用。
8)Deploy:在集成或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。

<code>mvn [plugin-name]:[goal-name]</code>
mvn clean dependency:copy-dependencies package

Maven 仓库能帮助我们管理构件(主要是JAR),它就是放置所有JAR文件(WAR,ZIP,POM等等)的地方。
Maven 仓库有三种类型:
默认情况下,不管Linux还是 Windows,每个用户在自己的用户目录下都有一个路径名为 .m2/repository/ 的仓库目录。
本地(local)
中央(central)
远程(remote)

Maven 依赖搜索顺序:
当我们执行 Maven 构建命令时,Maven 开始按照以下顺序查找依赖的库:
步骤 1 - 在本地仓库中搜索,如果找不到,执行步骤 2,如果找到了则执行其他操作。
步骤 2 - 在中央仓库中搜索,如果找不到,并且有一个或多个远程仓库已经设置,则执行步骤 4,如果找到了则下载到本地仓库中以备将来引用。
步骤 3 - 如果远程仓库没有被设置,Maven 将简单的停滞处理并抛出错误(无法找到依赖的文件)。
步骤 4 - 在一个或多个远程仓库中搜索依赖的文件,如果找到则下载到本地仓库以备将来引用,否则 Maven 将停止处理并抛出错误(无法找到依赖的文件)。

常用插件列表
在这里插入图片描述

Maven 使用 archetype(原型) 来创建自定义的项目结构,形成 Maven 项目模板.

Maven命令package、install、deploy的联系与区别 (重要)
mvn clean package依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)等7个阶段。
mvn clean install依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install等8个阶段。
mvn clean deploy依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install、deploy等9个阶段。
主要区别:
package命令完成了项目编译、单元测试、打包功能,但没有把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库。
install命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库,但没有布署到远程maven私服仓库。
deploy命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库。

面试题

1.Maven 如何引入jar包,流程是什么样子的?
主要分为三种方法。
这里以Junit为例
法1:利用dependency 本地jar包

<dependency><groupId>com.jouypub</groupId>  <!--自定义--><artifactId>cloud</artifactId>    <!--自定义--><version>1.0</version> <!--自定义--><scope>system</scope> <!--system,类似provided,需要显式提供依赖的jar以后,Maven就不会在Repository中查找它--><systemPath>${basedir}/lib/cloud.jar</systemPath> <!--项目根目录下的lib文件夹下,也可以是本机其它目录的绝对路径-->
</dependency>

法二:引用外部lib
注意写Junit测试的时候 注意依赖写法:

<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.1</version> //需要用4.12以上才可以Junit<scope>compile</scope> //注意不是test 需要使用compile </dependency>

在这里插入图片描述
法三:
将外部jar打入本地maven仓库
cmd 进入jar包所在路径,执行以下命令

mvn install:install-file -Dfile=cloud.jar -DgroupId=com.hope.cloud -DartifactId=cloud -Dversion=1.0 -Dpackaging=jar

引入依赖:

<dependency><groupId>com.hope.cloud</groupId><artifactId>cloud</artifactId><version>1.0</version>
</dependency>

2.Maven里面的包冲突应该怎么解决?

依赖冲突是指项目依赖的某一个jar包,有多个不同的版本,因而造成了包版本冲突.

A -> C -> X(1.0)
B -> D -> X(2.0)

相同jar不同版本,根据依赖的路径长短来决定引入哪个依赖。
两大原则:
1路径最近者优先
相同jar不同版本,根据依赖的路径长短来决定引入哪个依赖。

依赖链路一:A -> B -> C -> X(1.0)
依赖链路二:F -> D -> X(2.0)  (选中)

2第一声明者优先
在依赖路径长度相等的前提下,在POM中依赖声明的顺序决定了谁会被解析使用**,顺序最前的那个依赖优胜。**该例中,如果A的依赖声明在C之前,那么Y (1.0)就会被解析使用.

3Maven仓库的优先级? (前面知识点已讲述流程)
本地仓库 > ***(profile)> 远程仓库(repository)
镜像依赖于远程仓库/中央仓库,因此可以视作远程仓库的一部分。

4Maven 常用命令?

maven 命令的格式为 mvn [plugin-name]:[goal-name],可以接受的参数如下。
-D 指定参数,如 -Dmaven.test.skip=true 跳过单元测试;
-P 指定 Profile 配置,可以用于区分环境;
-e 显示maven运行出错的信息;
-o 离线执行命令,即不去远程仓库更新包;
-X 显示maven允许的debug信息;
-U 强制去远程更新snapshot的插件或依赖,默认每天只更新一次。最重要的几个:
创建maven项目:mvn archetype:create
指定 group: -DgroupId=packageName
指定 artifact:-DartifactId=projectName
创建web项目:-DarchetypeArtifactId=maven-archetype-webapp
maven 打包:mvn package
编译源代码: mvn compile
编译测试代码:mvn test-compile
清理maven项目:mvn clean (注意是target清理)
启动tomcat:mvn tomcat:run
启动jetty:mvn jetty:run
运行打包部署:mvn tomcat:deploy
撤销部署:mvn tomcat:undeploy
启动web应用:mvn tomcat:start
停止web应用:mvn tomcat:stop
重新部署:mvn tomcat:redeploy

5关于scope依赖范围 ?
compile:默认的scope,运行期有效,需要打入包中。
provided:编译期有效,运行期不需要提供,不会打入包中。
runtime:编译不需要,在运行期有效,需要导入包中。(接口与实现分离)
test:测试需要,不会打入包中。
system:表示需要显式指定依赖的路径。非本地仓库引入、存在系统的某个路径下的jar。(一般不使用)

6 说一说Maven 各元素标签的含义

        元素名称                             简   介<project>                         POM的xml根元素<parent>                          声明继承<modules>                         声明聚合<groupId>                         坐标元素之一<artifactId>                      坐标元素之一<version>                         坐标元素之一<packaging>                       坐标元素之一,默认值jar<name>                            名称<description>                     描述<organization>                    所属组织<licenses><license>               许可证<mailingLists><mailingList>       邮件列表<developers><developer>           开发者<contributors><contributor>       贡献者<issueManagement>                 问题追踪系统<ciManagement>                    持续集成系统<scm>                             版本控制系统<prerequisites><maven>            要求Maven最低版本,默认值为2.0<build><sourceDirectory>          主源码目录<build><scriptSourceDirectory>    脚本源码目录<build><testSourceDirectory>      测试源码目录<build><outputDirectory>          主源码输出目录<build><testOutputDirectory>      测试源码输出目录<build><resources><resource>      主资源目录<build><testResources><testResource> 测试资源目录<build><finalName>                输出主构件的名称<build><directory>                输出目录<build><filters><filter>          通过properties文件定义资源过滤属性<build><extensions><extension>    扩展Maven的核心<build><pluginManagement>         插件管理<build><plugins><plugin>          插件<profiles><profile>               POM Profile<distributionManagement><repository>  发布版本部署仓库       <distributionManagement> <snapshotRepository> 快照版本部署仓库       <distributionManagement> <site>   站点部署<repositories><repository>        仓库<pluginRepositories><pluginRepository>   插件仓库<dependencies><dependency>        依赖                      <dependencyManagement>            依赖管理<properties>                      Maven属性<reporting><plugins>              报告插件

7 说一下Maven settings 配置情况:

1<settings>,settings.xml文档的根元素
2<localRepository>,本地仓库
3<interactiveMode>,Maven是否与用户交互,默认值true
4<offline>,离线模式,默认值false
5<pluginGroups>  <pluginGroup>,插件组
6<servers>  <server>,下载与部署仓库的认证信息
7<mirrors>  <mirror>,仓库镜像
8<proxies>  <proxy>,代理
9<profiles>  <profile>,Settings Profile
10<activeProfiles>  <activeProfile>,激活Profile

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/315973.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sql——窗口范围之partition by 与 order by

partition by 关键字 partition by 在开窗函数中&#xff0c;常用于表示某个分区&#xff0c;规则了数据的范围 order by 关键字 order by 常用于对分区内的数据进行排序&#xff0c;常见的情况下&#xff0c;order by还能规定sql语句的影响范围。 rows between unbounded …

【Python排序算法系列】—— 插入排序

​ ​ &#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 &#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 2023年度总结→ http://t.csdnimg.cn/yIeru 目录 插入排序 理解 过程演示&#xff1a; 插…

C语言:二分查找查找有序数组中的元素

前言 在我们学习C语言的过程中&#xff0c;如果要查找一个数组当中是否存在某一个元素&#xff0c;我们可能会遍历整个数组&#xff0c;来依次判断是否存在这个函数&#xff0c;但这么做是效率极低的&#xff0c;如果数组中有很多个元素&#xff0c;那么我们要查找半天 二分查…

玩转贝启科技BQ3588C开源鸿蒙系统开发板 —— 开发板详情与规格

本文主要参考&#xff1a; BQ3588C_开发板详情-开源鸿蒙技术交流-Bearkey-开源社区 BQ3588C_开发板规格-开源鸿蒙技术交流-Bearkey-开源社区 厦门贝启科技有限公司-Bearkey-官网 1. 开发板详情 RK3588 核心板是一款由贝启科技自主研发的基于瑞芯微 RK3588 AI 芯片的智能核心…

Android textview展示富文本内容

今天实现的内容&#xff0c;就是上图的效果&#xff0c;通过Span方式展示图片&#xff0c;需要支持文字颜色改变、加粗。支持style\"color:green; font-weight:bold;\"展示。尤其style标签中的font-size、font-weight是在原生中不被支持的。 所以我们今天需要使用自…

竞赛保研 基于机器视觉的二维码识别检测 - opencv 二维码 识别检测 机器视觉

文章目录 0 简介1 二维码检测2 算法实现流程3 特征提取4 特征分类5 后处理6 代码实现5 最后 0 简介 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于机器学习的二维码识别检测 - opencv 二维码 识别检测 机器视觉 该项目较为新颖&#xff0c;适合作为竞赛课…

【docker】如何编写dockerfile文件,构建docker镜像

如何编写dockerfile文件&#xff0c;构建docker镜像 一、docker 镜像与 dockerfile1.1 什么是Docker镜像1.2 Docker 镜像的结构 二、dockerfile 中常用的构建指令三、dockerfile 内容示例四、构建 docker 镜像 一、docker 镜像与 dockerfile 1.1 什么是Docker镜像 Docker镜像…

目标检测-Owo Stage-YOLOv2

文章目录 前言一、YOLOv2的网络结构和流程二、YOLOv2的创新点预处理网络结构训练 总结 前言 根据前文目标检测-One Stage-YOLOv1可以看出YOLOv1的主要缺点是&#xff1a; 和Fast-CNN相比&#xff0c;速度快&#xff0c;但精度下降。&#xff08;边框回归不加限制&#xff09;…

Eureka服务注册与发现中心

简介 Spring Cloud封装了Netflix 公司开发的Eureka模块来实现服务治理 在传统的RPC远程调用框架中&#xff0c;管理每个服务与服务之间依赖关系比较复杂&#xff0c;管理比较复杂&#xff0c;所以需要使用服务治理&#xff0c;管理服务于服务之间依赖关系&#xff0c;可以实现…

自动化测试之等待方式详解

在自动化测试中&#xff0c;等待是一个重要的技术&#xff0c;用于处理页面加载、元素定位、元素状态改变等延迟问题。 等待能够确保在条件满足后再进行后续操作&#xff0c;提高自动化测试的稳定性以及可靠性。 等待方式&#xff1a;显示等待、隐式等待、线程睡眠 1. 显式等…

TCP_可靠数据传输原理

引言 在网络通信中&#xff0c;TCP是确保数据可靠传输的关键协议。但在我们深入研究TCP拥塞控制技术之前&#xff0c;让我们先探索可靠数据传输的原理&#xff0c;特别是TCP头部中一些重要字段的作用。 网络层提供了点对点的通信服务&#xff0c;努力交付数据报&#xff0c;但…

鸿蒙OpenHarmony开发实战-0开始做游戏渲染引擎

首先实现了一个通用的画廊组件来作为练手项目&#xff0c;它主要使用了四个基础组件和容器组件&#xff1a; 我们放置一个按钮来触发 showGallery 方法&#xff0c;该方法控制 panel 弹出式组件的显示和隐藏&#xff0c;这里的 div 和 button 标签就是 hml 内置的组件&#xf…