Maven 面试问题(Maven Interview Questions)
亲爱的读者,这些Maven Interview Questions专门设计用于让您了解在面对Maven主题时可能遇到的问题的性质。 根据我的经验,好的面试官在你的面试中几乎不打算问任何特定的问题,通常问题从这个主题的一些基本概念开始,然后他们继续基于进一步的讨论和你回答的内容:
项目部署涉及哪些步骤?
通常,部署过程包括以下步骤 –
- 将正在进行的所有项目中的代码签入SVN或源代码存储库并对其进行标记。
- 从SVN下载完整的源代码。
- 构建应用程序。
- 将构建输出WAR或EAR文件存储到公共网络位置。
- 从网络获取文件并将文件部署到生产站点。
- 更新了包含应用程序的日期和更新版本号的文档。
什么是Maven?
Maven是一个项目管理和理解工具。 Maven为开发人员提供了完整的构建生命周期框架。 由于Maven使用标准目录布局和默认构建生命周期,开发团队几乎可以立即自动化项目的构建基础架构。
当你说Maven使用约定优于配置时意味着什么?
Maven使用约定优于配置,这意味着开发人员不需要自己创建构建过程。 开发人员不必提及每个配置细节。
Maven管理的方面有哪些?
Maven为开发人员提供管理以下方法的方法
- Builds
- Documentation
- Reporting
- Dependencies
- SCMs
- Releases
- Distribution
- 邮件列表
你怎么知道你使用的mvn的版本?
输入以下命令 –
mvn --version
什么是POM?
POM代表项目对象模型。 它是Maven的基本工作单元。 它是一个XML文件。 它始终作为pom.xml驻留在项目的基本目录中。 它包含有关项目的信息以及Maven用于构建项目的各种配置详细信息。
POM包含哪些信息?
POM包含以下一些配置信息 –
- 项目依赖
- plugins
- goals
- 建立档案
- 项目版本
- developers
- 邮件列表
什么是Maven神器?
工件是一个文件,通常是一个部署到Maven存储库的JAR。 Maven构建会生成一个或多个工件,例如已编译的JAR和“sources”JAR。
每个工件都有一个组ID(通常是反向域名,如com.example.foo),工件ID(只是一个名称)和一个版本字符串。 三者一起唯一地识别工件。 项目的依赖项被指定为工件。
什么是Maven构建生命周期?
构建生命周期是一个明确定义的阶段序列,它定义了目标的执行顺序。 这里阶段代表生命周期的一个阶段。
命名Maven的3构建生命周期。
三个构建生命周期是 –
- clean:清除先前构建创建的工件。
- default (or build):这用于构建应用程序。
- site:为项目生成站点文档。
快速构建Maven站点的命令是什么?
输入命令 –
mvn site
命令mvn clean
做什么?
在开始构建过程之前,此命令将删除包含所有构建数据的目标目录。
Maven Build Lifecycle的各个阶段是什么?
以下是阶段 –
- validate −验证项目是否正确并且所有必要信息都可用。
- compile −编译项目的源代码。
- test −使用合适的单元测试框架测试编译的源代码。 这些测试不应要求打包或部署代码
- package −获取已编译的代码并将其打包为可分发的格式,例如JAR。
- integration-test −如有必要,将程序包处理并部署到可以运行集成测试的环境中。
- verify −运行任何检查以验证包是否有效并符合质量标准。
- install −将软件包安装到本地存储库中,以便在本地用作其他项目的依赖项。
- deploy −在集成或发布环境中完成,将最终包复制到远程存储库以与其他开发人员和项目共享。
Maven术语的目标是什么?
目标代表一项有助于项目建设和管理的特定任务。 它可能绑定到零个或多个构建阶段。 未绑定到任何构建阶段的目标可以通过直接调用在构建生命周期之外执行。
这个命令会做什么mvn clean dependency:copy-dependencies package
?
此命令将清理项目,复制依赖项并打包项目(执行所有阶段直到package
)。
清洁生命周期包含哪些阶段?
清洁生命周期包括以下阶段 –
- pre-clean
- clean
- post-clean
网站生命周期包含哪些阶段?
Site Lifecycle的各个阶段是 –
- pre-site
- site
- post-site
- site-deploy
什么是Build Profile?
构建配置文件是一组配置值,可用于设置或覆盖Maven构建的默认值。 使用构建配置文件,您可以为不同的环境(例如Production v/s开发环境)自定义构建。
什么是不同类型的构建配置文件?
构建配置文件有三种类型 –
- Per Project −在项目POM文件pom.xml中定义。
- Per User −在Maven设置xml文件中定义(%USER_HOME%/。m2/settings.xml)。
- Global −在Maven全局设置xml文件中定义(%M2_HOME%/ conf/settings.xml)
如何激活配置文件?
可以通过各种方式激活Maven构建配置文件 –
- 显式使用命令控制台输入。
- 通过maven设置。
- 基于环境变量(用户/系统变量)。
- 操作系统设置(例如,Windows系列)。
- 存在/丢失文件。
什么是Maven存储库?
存储库是一个存储所有项目jar,库jar,插件或任何其他项目特定工件的目录,并且可以由Maven轻松使用。
什么类型的Maven存储库?
Maven存储库有三种类型:本地,中央,远程
什么是本地存储库?
Maven本地存储库是计算机上的文件夹位置。 它是在第一次运行任何maven命令时创建的。 Maven本地存储库保存您项目的所有依赖项(库jar,插件罐等)。
本地存储库的默认位置是什么?
~.m2/repository
在本地存储库中安装JAR文件的命令是什么?
mvn install
什么是中央存储库?
它是Maven社区提供的存储库。 它包含大量常用库。 当Maven在本地存储库中找不到任何依赖项时,它会使用以下URL开始在中央存储库中搜索:http://repo1.maven.org/maven2/。
什么是远程存储库?
有时,Maven在中央存储库中找不到提到的依赖项,然后它会停止构建过程并向控制台输出错误消息。 为了防止这种情况,Maven提供了Remote Repository的概念,它是开发人员自己的包含所需库或其他项目jar的自定义存储库。
Maven搜索依赖库的顺序是什么?
以下是搜索模式 –
- 步骤1 – 在本地存储库中搜索依赖项,如果未找到,则移至步骤2,如果找到则执行进一步处理。
- 步骤2 – 在中央存储库中搜索依赖关系,如果未找到并且提到远程存储库/存储库,则移至步骤4,如果找到,则将其下载到本地存储库以供将来参考。
- 步骤3 – 如果没有提到远程存储库,Maven只是停止处理并抛出错误(无法找到依赖关系)。
- 步骤4 – 在远程存储库或存储库中搜索依赖关系,如果找到则将其下载到本地存储库以供将来参考,否则Maven将按预期停止处理并抛出错误(无法找到依赖关系)。
为什么使用Maven插件?
Maven插件习惯于 –
- 创建jar文件。
- 创建战争文件。
- 编译代码文件。
- 单元测试代码。
- 创建项目文档。
- 创建项目报告。
Maven插件有哪些类型?
Maven提供以下两种类型的插件 –
- Build plugins −它们在构建期间执行,应该在pom.xml的“build /”元素中配置
- Reporting plugins −它们在站点生成期间执行,应该在pom.xml的“reporting /”元素中进行配置
Maven何时使用External Dependency概念?
使用Maven存储库(本地,中央,远程)概念的Maven依赖管理。 假设任何远程存储库和中央存储库都没有依赖关系; 在这种情况下,Maven使用外部依赖的概念。
您需要为每个外部依赖项定义哪些内容?
外部依赖项(库jar位置)可以在pom.xml中以与其他依赖项相同的方式配置。
- 指定groupId与库名称相同。
- 指定artifactId与库名称相同。
- 将范围指定为系统。
- 指定相对于项目位置的系统路径。
什么是原型?
Archetype是一个Maven插件,其任务是根据模板创建项目结构。
基于archtype创建新项目的命令是什么?
输入以下命令 –
mvn archetype:generate
什么是Maven的SNAPSHOT?
SNAPSHOT是一个特殊版本,表示当前的开发副本。 与常规版本不同,Maven在每个构建的远程存储库中检查新的SNAPSHOT版本。
快照和版本有什么区别?
对于Version,如果Maven下载了上面提到的版本数据服务:1.0,它将永远不会尝试下载存储库中可用的较新的1.0。 要下载更新的代码,数据服务版本将升级到1.1。
在SNAPSHOT的情况下,每当app-ui团队建立他们的项目时,Maven将自动获取最新的SNAPSHOT(数据服务:1.0-SNAPSHOT)。
什么是Maven中的传递依赖?
传递依赖意味着避免需要发现和指定您自己的依赖项所需的库,并自动包含它们。
依赖管理在传递依赖的背景下意味着什么?
它意味着直接指定在传递依赖项中遇到它们时要使用的工件的版本。 对于示例项目,C可以在其dependencyManagement部分中包括B作为依赖项,并且直接控制在引用它时使用哪个版本的B.
当遇到多个版本的工件时,Maven如何处理并确定将使用哪种版本的依赖项?
当遇到多个版本的工件时,Maven确定要使用哪个版本的依赖项。 如果两个依赖版本在依赖关系树中处于相同的深度,则将使用第一个声明的依赖关系。 这称为依赖中介。
什么是依赖范围? 命名所有依赖范围。
依赖关系范围包括根据构建的当前阶段的依赖关系。 各种依赖范围是 –
- compile −此范围指示项目的类路径中的依赖项可用。 它是默认范围。
- provided −此范围表示JDK或web-Server/Container在运行时提供依赖关系。
- runtime −此范围指示编译不需要依赖项,但在执行期间是必需的。
- test −此范围表示依赖项仅适用于测试编译和执行阶段。
- system −此范围表示您必须提供系统路径。
- import −此范围仅在依赖项为pom类型时使用。 此范围指示应使用该POM的“dependencyManagement”部分中的依赖项替换指定的POM。
如何引用pom.xml文件中定义的属性?
要引用pom.xml中定义的属性,属性名称使用定义值的XML元素的名称,允许“pom”作为项目(根)元素的别名。
所以${pom.name}指的是项目的名称,${pom.version}指的是项目的版本,${pom.build.finalName}指的是建立项目时创建的文件的最终名称包装等
包装元素的默认值是什么? 如果没有定义包装元素? 那是什么默认值?
一些有效的包装价值是jar,war,ear和pom。 如果未指定包装值,则默认为jar。
pom文件中执行元素的用途是什么?
元素包含执行插件所需的信息。
如果您没有定义任何信息,您的pom从哪里继承该信息?
所有POM都从父级继承(尽管明确定义与否)。 此基本POM称为Super POM,包含默认继承的值。
如何在Maven中指定配置文件?
使用POM本身中可用元素的子集指定配置文件。
为什么在Maven中使用配置文件?
为项目提供可移植性(例如windows,linux等)。
将JARS外部依赖项存储在本地存储库而不是远程存储库中有什么好处?
它使用较少的存储空间,使得检查项目更快,不需要对JAR文件进行版本控制。
如何离线构建项目?
使用命令 –
mvn o package.
你如何排除依赖?
使用exclusion
元素。
什么是系统依赖?
与范围系统的依赖关系始终可用,并且不会在存储库中查找,它们通常用于告诉Maven有关JDK或VM提供的依赖关系。 因此,系统依赖性对于解决现在由JDK提供的工件的依赖性特别有用。
可选依赖有什么用?
可以使用“可选”元素将任何传递依赖项标记为可选。 例如,A取决于B,B取决于C.现在B将C标记为可选。 然后A不会用C.
什么是依赖性排除?
可以使用“排除”元素排除任何传递依赖性。 例如,A取决于B,B取决于C,那么A可以将C标记为排除。
如何在构建期间自动运行clean插件?
您可以将clean插件放在pom.xml文件中的执行标记内。
什么“你不能有两个插件执行相同(或缺少)元素”消息是什么意思?
这意味着您已使用相同的 多次执行插件。 为每个 提供唯一的 然后就可以了。
什么是Mojo?
mojo是Maven普通的旧Java对象。 每个mojo都是Maven中的可执行目标,插件是一个或多个相关mojos的分布。
Apache Ant和Maven有什么区别?
Ant只是一个工具箱,而Maven则是关于模式的应用,以实现一个显示可见性,可重用性,可维护性和可理解性的基础结构。 将Maven视为构建工具并仅仅是Ant的替代品是错误的。
最新评论
命令: nload
真是个良心站点哇,大公无私,爱了爱了
还可以直接搞一张映射表,存 uid | time | source_index, 第一次直接查对应的 time 选出前100, 第二次直接用 CompleteFuture 去分别用 source_in
干得漂亮,多个朋友堵条路
2021.2.2版本的不适用吧
现在还可以用么
激活码有用,感谢分享
激活码的地址打不开了