Java最全面试题->Java基础面试题->JavaWeb面试题->Maven面试题

news/2024/10/21 7:38:03/

Maven

下边是我自己整理的面试题,基本已经很全面了,想要的可以私信我,我会不定期去更新思维导图
哪里不会点哪里
在这里插入图片描述

maven_5">什么是maven

  • Maven是基于POM(工程对象模型),通过一小段描述来对项目的代码、报告、文件进管理的工具。
  • Maven是一个跨平台的项目管理工具,它是使用java开发的,它要依赖于jdk1.6及以上
  • Maven主要有两大功能:管理依赖、项目构建。(依赖指的是jar包)

maven_9">maven优缺点?

  • 优点:
    1. 简化了项目构建,依赖管理:
    2. 易于上手
    3. 便于与持续集成工具(Jenkins)整合
    4. 便于项目升级,无论是项目本身升级还是项目使用的依赖升级。
    5. 有助于多模块项目的开发,一个模块开发好后,发布到仓库,依赖该模块时可以直接从仓库更新,而不用自己去编译。
    6. maven有很多插件,便于功能扩展,比如生产站点,自动发布版本等
  • 缺点:
    1. maven是一个庞大的构建系统,学习难度大。
    2. maven采用约定优于配置的策略(convention over configuration),虽然上手容易,但是一旦出了问题,难于调试。
    3. 中国的网络环境差,很多repository无法访问,比如google code, jboss 仓库无法访问等。

maven_21">maven常见的依赖范围有哪些?

  • compile:编译依赖,默认的依赖方式,在编译(编译项目和编译测试用例),运行测试用例,运行(项目实际运行)三个阶段都有效,典型地有spring-core等jar。
  • test:测试依赖,只在编译测试用例和运行测试用例有效,典型地有JUnit。
  • provided:对于编译和测试有效,不会打包进发布包中,典型的例子为servlet-api,一般的web工程运行时都使用容器的servlet-api。
  • runtime:只在运行测试用例和实际运行时有效,典型地是jdbc驱动jar包。
  • system:不从maven仓库获取该jar,而是通过systemPath指定该jar的路径。
  • import:用于一个dependencyManagement对另一个dependencyManagement的继承。

maven__28">maven 坐标的含义?

  • groupId :定义当前 Maven 项目隶属的实际项目。
  • artifactId :该元素定义当前实际项目中的一个 Maven 项目(模块)。推荐的做法是使用实际项目名称作为 artifactId 的前缀。比如上例中的 junit ,junit 就是实际的项目名称,方便而且直观。在默认情况下,Maven 生成的构件,会以 artifactId 作为文件头。例如 junit-3.8.1.jar ,使用实际项目名称作为前缀,就能方便的从本地仓库找到某个项目的构件。
  • version :该元素定义了使用构件的版本。
  • packaging :定义 Maven 项目打包的方式,使用构件的什么包。打包方式通常与所生成构件的文件扩展名对应。
  • classifier :该元素用来帮助定义构建输出的一些附件。附属构件与主构件对应。

maven__34">maven 常用命令?

  • mvn archetype:create :创建 Maven 项目。
  • mvn compile :编译源代码。
  • mvn deploy :发布项目。
  • mvn test-compile :编译测试源代码。
  • mvn test :运行应用程序中的单元测试。
  • mvn site :生成项目相关信息的网站。
  • mvn clean :清除项目目录中的生成结果。
  • mvn package :根据项目生成的 jar/war 等。
  • mvn install :在本地 Repository 中安装 jar 。
  • mvn clean package -Dmaven.test.skip=true :清除以前的包后重新打包,跳过测试类。

maven_45">maven构建的过程?

清理 ->编译 ->测试 ->报告 ->打包 ->部署

maven_47">maven的生命周期?

  • Maven有三套相互独立的生命周期,分别是 Clean、Default 和 Site。每个生命周期包含一些阶段,阶段是有顺序的,后面的阶段依赖于前面的阶段。
  • Clean 生命周期:
    清理项目:
    pre-clean:执行清理前需要完成的工作。
    clean:清理上一次构建生成的文件。
    post-clean:执行清理后需要完成的工作
  • Default 生命周期:
    构建项目:
    validate:验证工程是否正确,所有需要的资源是否可用。
    compile:编译项目的源代码。
    test:使用合适的单元测试框架来测试已编译的源代码。这些测试不需要已打包和布署。
    package:把已编译的代码打包成可发布的格式,比如 jar、war 等。
    integration-test:如有需要,将包处理和发布到一个能够进行集成测试的环境。
    verify:运行所有检查,验证包是否有效且达到质量标准。
    install:把包安装到maven本地仓库,可以被其他工程作为依赖来使用。
    deploy:在集成或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。
  • Site 生命周期:
    建立和发布项目站点:
    pre-site:生成项目站点之前需要完成的工作
    site:生成项目站点文档
    post-site:生成项目站点之后需要完成的工作
    site-deploy:将项目站点发布到服务器
  • 各个生命周期相互独立,一个生命周期的阶段前后依赖。
  • mvn clean :调用 Clean 生命周期的 clean 阶段,实际执行 pre-clean 和 clean 阶段
  • mvn test :调用 Default 生命周期的 test 阶段,实际执行 test 以及之前所有阶段
  • mvn clean install :调用 Clean 生命周期的 clean 阶段和 Default 生命周期 的 install 阶段,实际执行 pre-clean 和 clean ,install 以及之前所有阶段。

使用“mvn clean package”命令进行项目打包,该命令具体做了什么?

  • 使用清理插件:maven-clean-plugin执行清理删除已有target目录;
  • 使用资源插件:maven-resources-plugin执行资源文件的处理;
  • 使用编译插件:maven-compiler-plugin编译所有源文件生成class文件至target\classes目录下;
  • 使用资源插件:maven-resources-plugin执行测试资源文件的处理;
  • 使用编译插件:maven-compiler-plugin编译测试目录下的所有源代码;
  • 使用插件:maven-surefire-plugin运行测试用例;

如何解决冲突?

  • 第一步,要找到 Maven 加载的到时是什么版本的 jar 包,通过mvn dependency:tree 查看依赖树,或者使用 IDEA Maven Helper 插件。
  • 第二步,通过 Maven 的依赖原则来调整坐标在 pom 文件的申明顺序是最好的办法,或者使用将冲突中不想要的 jar 引入的 jar删掉。

maven_84">maven依赖原则?

  • 依赖路径最短优先原则项目依赖了两个jar包,其中A-B-C-D , A-D。由于第二条路径最短,所以项目使用的是第二个D。
  • pom文件中申明顺序优先
    项目依赖了两个jar包,A-B-D ,A-C-D。maven会根据加载顺序。如果先申明了B,在申明了C,那么最后依赖就用A-C-D。
  • 覆写优先
    子pom内声明的优先于父pom中的依赖。

maven_90">说一下maven仓库?

  • Maven仓库有2种
    本地仓库
    远程仓库
  • Maven 会先搜索本地仓库(repository),发现本地没有然后从远程仓库(中央仓库)获取。
    私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的 Maven 用户使用。当 Maven 需要下载构件的时候,它从私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,缓存在私服上之后,再为 Maven 的下载请求提供服务。我们还可以把一些无法从外部仓库下载到的构件上传到私服上。

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

相关文章

Python基础09

目录 1.封装(Enclosure) 2.多态(Polymorphic) 3.魔术方法(Magic Methods) 4.重写 4.1函数重写 4.2运算符重载 5.super()函数 6.迭代器 7.生成器 8.处理异常 9.函数式编程 9.1函数作为参数 9.1.1lambda表达式 9.1.2内置高阶函数 9.2函数作为返回值 9.2.1闭包 9.…

【C语言】数据输出格式控制

数据的输出格式修饰 常用两种&#xff1a; 整型中&#xff0c;输出数据左对齐、右对齐、占m位、不足m位前补0。浮点型中&#xff0c;默认通过四舍五入保留小数点后6位&#xff0c;通过参数设置保留小数点后n位。 #include <stdio.h> #define PI 3.14159 /* 功能&#x…

前端项目中遇到的技术问题

1.性能问题 页面加载过长、图像加载慢。解决方案&#xff1a;代码分割&#xff0c;按照需求加载模块&#xff0c;减少初始的加载量或者使用懒加载、资源压缩、cdn加速 2.响应式设计&#xff08;移动设备适配&#xff09; 不同的屏幕尺寸&#xff0c;布局和样式不统一。解决方…

依赖标签分类任务Smin值计算(蛋白质功能预测,GO标签)

前言 Smin是在蛋白质功能预测中比较流行的一个指标&#xff0c;具体由来我也不甚清楚&#xff0c;只是在最近复现的几篇论文中反复出现了&#xff0c;所以记录一下。 计算方法 &#xff08;图来自于PSPGO论文&#xff09; 其中&#x1d70f;表示阈值&#xff0c;t表示GO标签…

【动态规划】【路径问题】下降路经最小和、最小路径和、地下城游戏

4. 下降路径最小和 931. 下降路径最小和 算法原理 确定状态表示 dp[i][j] 表示&#xff1a;到达 [i, j] 位置&#xff0c;最小的下降路径 状态转移方程 dp[i][j] 从 [i-1, j-1] 到达 [i, j] > dp[i-1][j-1] m[i][j]从 [i-1, j] 到达 [i, j] > dp[i-1][j] m[i][j]从 …

RabbitMQ service is already present - only updating service parameters

Windows下卸载RabbitMQ之后,然后重新注册RabbitMQ服务的时候,报错以下信息: D:\software\rabbitmq-server-4.0.2\rabbitmq_server-4.0.2\sbin>D:\software\rabbitmq-server-4.0.2\rabbitmq_server-4.0.2\sbin\rabbitmq-service.bat install RabbitMQ service is already …

csp普及组算法集训--Dfs

DFS是一种经典的搜索算法&#xff0c;也是检测有没有编程天赋的试金石。 DFS&#xff1a;搜索与回溯 题1&#xff1a;自然数的拆分 //自然数的拆分 #include<bits/stdc.h> using namespace std; int n,ans[101]; void dfs(int sum,int dp){if(sum>n){return;//不可…

初识git · 远程操作

目录 前言&#xff1a; 理解分布式版本控制系统 远程仓库 仓库操作 克隆仓库 推送和抓取 特殊文件 取别名 标签管理 前言&#xff1a; 在基本操作&#xff0c;分支管理这几个部分&#xff0c;我们都会在本地仓库操作了&#xff0c;但是目前还没有办法将自己的代码远程…