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.mzph.cn/news/592713.shtml

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

相关文章

Axure医疗-住院板块,住院患者原型预览,新增医护人员原型预览,新增病房原型预览,选择床位原型预览,主治医生原型预览,主治医生医嘱原型预览

目录 一.医疗项目原型图-----住院板块 1.1 住院板块原型预览 1.2 新增住院患者原型预览 1.3 新增医护人员原型预览 1.4 新增病房原型预览 1.5 选择床位原型预览 1.6 主治医生原型预览 1.7 主治医生医嘱原型预览 1.8 主治医生查看患者报告原型预览 1.9 护士原型预…

【项目问题解决】参数过滤器实现代码及相关问题

目录 【项目问题解决】参数过滤器实现代码及相关问题 1.前言2.代码实现2.1常量类2.2过滤器方法2.3 注意 3.总结4.参考 文章所属专区 项目问题解决 1.前言 参数过滤器实现代码及相关问题 2.代码实现 2.1常量类 Component public class ProjectConstants {public static St…

山海鲸可视化软件的优势:数据整合、可视化与个性化定制

随着科技的快速发展&#xff0c;企业数字化转型已成为必然趋势。而对于一些本身没有开发优势或非技术型企业&#xff0c;数字化产品的选择就成为重中之重。作为山海鲸可视化软件的开发者&#xff0c;我们深知这一点&#xff0c;对于企业来说&#xff0c;能选择一个产品一定要有…

C# Onnx yolov8 竹签计数、一次性筷子计数

目录 效果 模型信息 项目 代码 数据集 下载 C# Onnx yolov8 竹签计数、一次性筷子计数 效果 模型信息 Model Properties ------------------------- date&#xff1a;2024-01-03T08:55:22.768617 author&#xff1a;Ultralytics task&#xff1a;detect license&#x…

并发编程下的集合:数组寻址、LinkedList、HashMap、ConcurrentHashMap

数组如何寻址 a[n]起始地址(n*字节数) 译&#xff1a;a[2]100(2*4) 2为下标、4为int类型字段占四个字节 LinkedList LinkedList为双向链表结构&#xff0c;链表结构又分为单向、双向、以及循环。 // 双向链表 private static class Node<E> {E item;Node<E> nex…

vscode中增加参数的一个方法

1 在settings.json 文件中增加参数 2. 在参数中配置 这里也是ok的

【Mybatis】深度解析MyBatis中#和$的差异

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; Mybatis ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 #&#xff08;预编译&#xff09;&#xff1a; $&#xff08;直接拼接&#xff09;&#xff1a; 结语 我的其他博客 前言…

【unity插件】推荐一款开源的Unity网格破碎插件,实现在Unity中展示可破坏的墙壁的——unity-fracture

最终效果 地址 https://github.com/ElasticSea/unity-fracture 介绍 FractureThis.cs 脚本获取其游戏对象中的所有网格并合并它们。这个全局网格被发送到这里 nvblast &#xff0c;以分解成块。块的内部部分为要应用的材料生成了新的 UV。原始游戏对象被隐藏&#xff0c;每个…

提升三维模型数据的几何坐标纠正速度效率具体技术方法

提升三维模型数据的几何坐标纠正速度效率具体技术方法 根据搜索结果&#xff0c;以下是提升倾斜摄影三维模型数据的几何坐标纠正和三维重建速度的具体技术方法&#xff1a; 1、增加控制点&#xff1a;通过增加控制点数量可以提高几何坐标精度。控制点是已知地面坐标的点&#…

微信公众号内网穿透本地调试微信授权

微信公众号内网穿透本地调试一直以来都比较麻烦 怕自己忘记&#xff0c; 记录一下 准备 natapp获取一个域名隧道下载nginx配置微信公众号web网页授权域名 1.natapp获取一个域名隧道 在natapp官网&#xff08;https://natapp.cn/&#xff09;进行注册登录后&#xff0c;进入…

ES6 class详解

✨ 专栏介绍 在现代Web开发中&#xff0c;JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性&#xff0c;还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言&#xff0c;JavaScript具有广泛的应用场景&#x…

关于“Python”的核心知识点整理大全58

目录 19.2.3 注销 1. 注销URL urls.py 2. 视图函数logout_view() views.py 3. 链接到注销视图 base.html 19.2.4 注册页面 1. 注册页面的URL模式 urls.py 2. 视图函数register() views.py 3. 注册模板 register.html 4. 链接到注册页面 base.html 注意 19.3 …

1.2作业

温湿度数据通过中断处理显示到数码管中 main.c #include "spi.h"#include"si7006.h"int main(){int i0,j0,m0,n0;int num[10] {0xFC,0x60,0xDA,0xF2,0x66,0xB6,0x3E,0xE0,0xFE,0xF6};SPI_init();unsigned short hum;short tem;//进行si7006的初始化si700…

计算机网络 VLAN

路由器将多个局域网连接起来&#xff0c;而交换机将一个局域网里的设备连接起来。 路由器的端口分配局域网的网段&#xff08;子网网段&#xff09;&#xff0c;局域网的内部设备的ip都在这个网段里&#xff0c;再由交换机将数据派发到目的设备&#xff0c;交换机是按照MAC地址…

CMake入门教程【核心篇】编译类型Debug、Release、MinSizeRel、RelWithDebInfo

文章目录 1.说明1.1 Debug 配置1.2 Release 配置1.3 MinSizeRel 配置1.4 RelWithDebInfo 配置 2.提供的编译类型3.示例结论 1.说明 CMake作为一款强大的构建系统&#xff0c;提供了多种编译配置选项。这些配置影响编译过程中的优化级别和调试信息的包含情况。以下是CMake提供的…

技术人员的升级之路:六西格玛黑带培训的力量

在我从一名刚接触质量管理的新人成长为六西格玛黑带的过程中&#xff0c;有一个观念一直伴随着我&#xff0c;那就是改善和卓越不是一个项目&#xff0c;而是一场永无止境的旅程&#xff01; 退一步说&#xff0c;六西格玛管理带来的改变对一个组织有多么深刻呢&#xff1f;它…

10 个值得收藏的顶级手机数据恢复软件【2024年最新】

手机数据恢复&#xff0c;不要担心&#xff0c;今天就给大家分享10款数据恢复软件&#xff01; 现代人的手机中存储了许多重要数据&#xff0c;如照片、视频、消息、联系人等文件&#xff0c;如果手机损坏或数据丢失&#xff0c;这是一件非常烦恼的事情。此时&#xff0c;一款好…

教育CRM系统选型必看,CRM的这四大功能对教育企业来说必不可少

教育行业是出了名的“卷”&#xff0c;对教育企业来说&#xff0c;学生和家长也属于客户&#xff0c;培育与学生、家长的关系是成功的关键。然而&#xff0c;教育机构对CRM管理系统的需求复杂多变&#xff0c;很难找到满意的解决方案。与传统的CRM系统不同&#xff0c;教育机构…

信号可达1公里以上,Wi-Fi HaLow如何做到比传统Wi-Fi强?

随着物联网&#xff08;IoT&#xff09;技术的蓬勃发展&#xff0c;对于能够支持大量设备、长距离传输且功耗低的无线通信技术的需求日益增长。Wi-Fi HaLow&#xff08;基于IEEE 802.11ah标准&#xff09;是专为物联网需求量身定制的突破性无线解决方案。本文将深入探讨Wi-Fi H…

Zookeeper之Java客户端实战

ZooKeeper应用的开发主要通过Java客户端API去连接和操作ZooKeeper集群。可供选择的Java客户端API有&#xff1a; ZooKeeper官方的Java客户端API。第三方的Java客户端API&#xff0c;比如Curator。 接下来我们将逐一学习一下这两个java客户端是如何操作zookeeper的。 1. ZooKe…