Maven 整理(含面试题)

news2024/11/19 3:45:00

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.coloradmin.cn/o/1351846.html

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

相关文章

石头剪刀布游戏 - 华为OD统一考试

OD统一考试 分值&#xff1a; 100分 题解&#xff1a; Java / Python / C 题目描述 石头剪刀布游戏有 3 种出拳形状: 石头、剪刀、布。分别用字母 A,B,C 表示游戏规则&#xff1a; 出拳形状之间的胜负规则如下: A>B; B>C; C>A&#xff1b; 左边一个字母&#xff0c;…

Opencv(C++)学习之cv::calcHist 任意bin数量进行直方图计算

**背景&#xff1a;**当前网上常见的直方图使用方法都是默认使用256的范围&#xff0c;而对于使用特定范围的直方图方法讲的不够清楚。仔细研究后总结如下&#xff1a; 1、常见使用方法&#xff0c;直接对灰度图按256个Bin进行计算。 Mat mHistUn; int channels[1] { 0 }; {…

Django(五)

员工管理系统 1.新建项目 2.创建app python manage.py startapp app012.1 注册app 3. 设计表结构&#xff08;django&#xff09; from django.db import modelsclass Department(models.Model):""" 部门表 """title models.CharField(verbos…

Mysql 动态链接库配置步骤+ 完成封装init和close接口

1、创建新项目 动态链接库dll 2、将附带的文件都删除&#xff0c;创建LXMysql.cpp 3、项目设置 3.1、预编译头&#xff0c;不使用预编译头 3.2、添加头文件 3.3、添加类 3.4、写初始化函数 4、项目配置 4.1、右键解决方案-属性-常规-输出目录 ..\..\bin 4.2、生成lib文件 右…

【LeetCode-剑指offer】--15.找到字符串中所有字母异位词

15.找到字符串中所有字母异位词 方法&#xff1a;滑动窗口 class Solution {public List<Integer> findAnagrams(String s, String p) {List<Integer> ans new ArrayList<>();int m s.length(),n p.length();if(n > m){return ans;}int[] cnt1 new i…

部署上传漏洞的靶场环境upload-labs

1、工具介绍 upload-labs是一个使用php语言编写的&#xff0c;专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关&#xff0c;每一关都包含着不同上传方式。 upload-labs靶场开源地址&#xff1a;&#xff1a;https://…

Android14之audit2allow自动生成Selinux规则(一百七十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

k8s的声明式资源管理

在k8s当中支持两种声明资源的方式&#xff1a; 1、 yaml格式&#xff1a;主要用于和管理资源对象 2、 json格式&#xff1a;主要用于在API接口之间进行消息传递 声明式管理方法(yaml)文件 1、 适合对资源的修改操作 2、 声明式管理依赖于yaml文件&#xff0c;所有的内容都…

使用GPTs+Actions自动获取第三方数据

目录 安装插件与GPT对话联网插件首先,创建GPTs。 Voxscript 官网:https://voxscript.awt.icu/index.htmlOpenAI Schema:https://voxscript.awt.icu/swagger/v1/swagger.yamlServer URL: servers: url: https://voxscript.awt.icu安装插件 要使用这个插件&

【Linux】set命令使用

set命令 设置所使用shell的执行方式&#xff0c;可依照不同的需求来做设置。 语法 set [参数]选项及作用 执行令 &#xff1a; man set 执行命令结果 参数 -a  标示已修改的变量&#xff0c;以供输出至环境变量。-b  使被中止的后台程序立刻回报执行状态。-C  转向所…

draw流程图工具导入云原生(CNCF)相关控件

目录 1、通过draw导入xml文件&#xff0c;获取云原生相关的空间 2、引用自己的资源链接&#xff1a; 1、通过draw导入xml文件&#xff0c;获取云原生相关的空间 导入资源图库&#xff0c;资源放在下方&#xff0c;大家可以下载&#xff1a; 2、引用自己的资源链接&#xff1a;…

全面PDF分析:创建PDF解析API,可商业用

为什么我要自己制作这个接口?需求如下: 我需要对PDF内容进行深入分析。无论是总结PDF内容,还是基于PDF内容提出问题,首先我都需要提取出文本信息。经过市场调查,我发现缺乏可靠的PDF解析API服务。即便是付费服务,也没有发现特别合适的产品,大多数都是现成的网站工具。文…

【LabVIEW FPGA入门】创建第一个LabVIEW FPGA程序

本教程仅以compactRIO&#xff08;FPGA-RT&#xff09;举例 1.系统配置 1.1软件安装 FPGA-RT 1. LabVIEW Development System (Full or Professional) 2. LabVIEW Real-Time Module 3. LabVIEW FPGA Module 4. NI-RIO drivers 1.2硬件配置 1.使用线缆连接CompactRIO至主机…

vue3(十三)-基础入门之路由配置与重定向

一、一级路由与重定向 1、创建 App.vue 在父组件中导入子组件 Navbar <template><div><navbar></navbar></div> </template><style lang"scss"></style><script> import navbar from /components/Navbarex…

[GKCTF 2020]cve版签到

[GKCTF 2020]cve版签到 wp 信息搜集 题目页面&#xff1a; 页面中有提示&#xff1a;You just view *.ctfhub.com 点一下 View CTFHub 会回弹一些信息&#xff1a; 抓包看看&#xff1a; url 传参&#xff0c;判断是 ssrf 。但是当我将其改为 http://www.baidu.com 或者是…

2024年PMP考试新考纲-【人员领域】真题解析

1前面的文章中&#xff0c;华研荟从PMBOK第七版介绍了里面的各个章节最新考纲下的PMP考试真题&#xff0c;并做了详细的解析。 从今天起&#xff0c;我们从另一个角度来看一下PMP的最新考试真题&#xff1a;从新考纲下的三个领域来看。 事实上&#xff0c;PMI官方于2019年6月…

RA-4565SA(汽车串行接口实时时钟模块)

RA-4565SA车载用 保证高温下正常工作-40C ~ 125C&#xff0c;数据保持判断功能&#xff0c;通过一个VL-bit值&#xff0c;可以判断备份后恢复的数据的有效性。32.768kHz频率输出功能&#xff0c;CLKOUT 引脚输出(开漏输出)&#xff0c;可选择输出频率为32.768kHz, 1024Hz, 32Hz…

Mars3d的BusineDataLayer应该传data格式实现聚合效果

问题&#xff1a; 1.通过【Mars3d】加载new mars3d.layer.BusineDataLayer(的如果不用url使用data的话&#xff0c;格式应该是什么样子的呢&#xff1f; 相关说明&#xff1a;实质就是就是GraphicLayer&#xff0c;自己加graphic进去。 使用data的话要否需要用onCreateGraph…

@EnableXXX注解+@Import轻松实现SpringBoot的模块装配

文章目录 前言原生手动装配模块装配概述模块装配的四种方式准备工作声明自定义注解 导入普通类导入配置类导入ImportSelector导入ImportBeanDefinitionRegistrar 总结TODO后续--条件装配 前言 最早我们开始学习或接触过 SSH 或者 SSM 的框架整合&#xff0c;大家应该还记得那些…

Python图像处理:批量添加水印的优雅实现与进阶技巧

1. 简介 在日常图像处理中&#xff0c;为图片添加水印是一项常见任务。有多种方法和工具可供选择&#xff0c;而今天我们将专注于使用Python语言结合PIL库批量添加水印。 需要注意的是&#xff0c;所选用的图片格式不应为JPG或JPEG&#xff0c;因为这两种格式的图片不支持透明…