Java——《面试题——maven篇》

这篇具有很好参考价值的文章主要介绍了Java——《面试题——maven篇》。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

全文章节

Java——《面试题——基础篇》

Java——《面试题——JVM篇》

Java——《面试题——多线程&并发篇》

Java——《面试题——Spring篇》

Java——《面试题——SpringBoot篇》

Java——《面试题——MySQL篇》​​​​​​

Java——《面试题——SpringCloud》

Java——《面试题——Dobbo篇》

Java——《面试题——Nginx篇》

Java——《面试题——MQ篇》

Java——《面试题——Linux篇》

Java——《面试题——Zookeeper篇》

Java——《面试题——Redis篇》

Java——《面试题——分布式篇》

Java——《面试题——网络篇》

Java——《面试题——设计模式篇》

Java——《面试题——maven篇》

Java——《面试题——ElasticSearch篇》

Java——《面试题——tomcat篇》​​​​​​

Java——《面试题——Git篇》

Java——《面试题——软实力篇》

本文目录

 前文

1、什么是maven?

2、Maven能为我们解决什么问题?

3、说说maven有什么优缺点?

5、什么是Maven的坐标?

6、讲一下maven的生命周期

 7、说说你熟悉哪些maven命令?

8、如何解决依赖传递引起的版本冲突?

9、说说maven的依赖原则

10、说说依赖的解析机制?

11、说说插件的解析机制


1、什么是maven?

maven主要服务于基于java平台的项目构建,依赖管理和项目信息管理。

maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理 工具软件。它包含了一个项目对象模型,一组标准集合,一个项目生命周期,一个依赖管理系统和 用来运行定义在生命周期阶段中插件目标的逻辑。当使用Maven的时候,你用一个明确定义的项目 对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自于一组共享的(或自定 义的)插件。

2、Maven能为我们解决什么问题?

①添加第三方jar包

按照最原始的做法,我们是手动复制jar包到项目WEB-INF/lib下,每个项目都会有一份,造成大量 重复文件。而Maven将jar包放在本地仓库中统一管理,需要jar包只需要用坐标的方式引用即可。

②jar包之间的依赖关系

jar包之间往往不是独立的,很多jar需要在其他jar包的支持下才能够正常工作,称为jar包之间的依 赖关系。如果我们手动去导入,要知道jar包之间的依赖关系并一一导入是及其麻烦而且容易出错 的。如果使用Maven,它能够将当前jar包所依赖的其他所有jar包全部导入。

③获取第三方jar包

开发过程中我们需要用到很多jar包,每个jar包在官网获取的方式不尽相同,给工作带来了额外困 难。但是使用Maven可以以坐标的方式依赖一个jar包,Maven从中央仓库进行下载,并同时下载这 个jar包依赖的其他jar包。

④将项目拆分为多个工程模块

项目的规模越来越大,已经不可能通过package结构来划分模块,必须将项目拆分为多个工程协同 开发。

3、说说maven有什么优缺点?

优点

  • 简化了项目依赖管理
  • 易于上手,对于新手来说了解几个常用命令即可满足日常工作
  • 便于与持续集成工具(jenkins)整合
  • 便于项目升级,无论是项目本身还是项目使用的依赖
  • maven有很多插件,便于功能扩展,比如生产站点,自动发布版本等

缺点

  • Maven是一个庞大的构建系统,学习难度大。(很多都可以这样说,入门容易[优点]但是精通 难[缺点])
  • Maven采用约定约定优于配置的策略,虽然上手容易但是一旦出现问题,难于调试中网络环境 较差,很多repository无法访问

5、什么是Maven的坐标?

Maven其中一个核心的作用就是管理项目的依赖,引入我们所需的各种jar包等。为了能自动化的解 析任何一个Java构件,Maven必须将这些Jar包或者其他资源进行唯一标识,这是管理项目的依赖的 基础,也就是我们要说的坐标。包括我们自己开发的项目,也是要通过坐标进行唯一标识的,这样 才能才其它项目中进行依赖引用。

maven的坐标通过groupId,artifactId,version唯一标志一个构件。groupId通常为公司或组织名 字,artifactId通常为项目名称,versionId为版本号。

6、讲一下maven的生命周期

Maven的 生命周期:从我们的项目构建,一直到项目发布的这个过程。

Java——《面试题——maven篇》,java,java,maven,开发语言

 每个阶段的说明:

Java——《面试题——maven篇》,java,java,maven,开发语言

 7、说说你熟悉哪些maven命令?

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

8、如何解决依赖传递引起的版本冲突?

可通过dependency的exclusion元素排除掉依赖。

9、说说maven的依赖原则

最短路径原则(依赖传递的路径越短越优先)

pom文件申明顺序优先(路径长度一样,则先申明的优先)

覆写原则(当前pom文件里申明的直接覆盖父工程传过来的)

10、说说依赖的解析机制?

当依赖的范围是 system 的时候,Maven 直接从本地文件系统中解析构件。

根据依赖坐标计算仓库路径,尝试直接从本地仓库寻找构件,如果发现对应的构件,就解析成功。

如果在本地仓库不存在相应的构件,就遍历所有的远程仓库,发现后,下载并解析使用。 如果依赖的版本是 RELEASE 或 LATEST,就基于更新策略读取所有远程仓库的元数据文件 (groupId/artifactId/maven-metadata.xml),将其与本地仓库的对应元合并后,计算出 RELEASE 或者 LATEST 真实的值,然后基于该值检查本地仓库,或者从远程仓库下载。

如果依赖的版本是SNAPSHOT,就基于更新策略读取所有远程仓库的元数据文件,将它与本地仓库对应的元数据合并,得到最新快照版本的值,然后根据该值检查本地仓库,或从远程仓库下载。

如果最后解析得到的构件版本包含有时间戳,先将该文件下载下来,再将文件名中时间戳信息删 除,剩下 SNAPSHOT 并使用(以非时间戳的形式使用)。

11、说说插件的解析机制

与依赖的构件一样,插件也是基于坐标保存在Maven仓库中。在用到插件的时候会先从本地仓库查 找插件,如果本地仓库没有则从远程仓库查找插件并下载到本地仓库。与普通的依赖构件不同的 是,Maven会区别对待普通依赖的远程仓库与插件的远程仓库。前面提到的配置远程仓库只会对普 通的依赖有效果。当Maven需要的插件在本地仓库不存在时是不会去我们以前配置的远程仓库查找 插件的,而是需要有专门的插件远程仓库。文章来源地址https://www.toymoban.com/news/detail-516203.html

到了这里,关于Java——《面试题——maven篇》的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java开发面试--Spring专区

    1、 Spring 框架的核心特点和优势是什么? 答: 轻量级和非侵入性 :Spring 是一个轻量级的框架,它不会强制性地改变你的应用架构,而是通过依赖注入和面向切面编程等特性,提供了一种非侵入式的开发方式。 依赖注入 (Dependency Injection):Spring 提供了强大的依赖注入功能

    2024年02月04日
    浏览(42)
  • Java高级开发面试题整理

    1、什么是进程和线程? 进程是指程序的一次执行过程,是系统运行程序的基本单位,系统运行一个程序就是一个进程创建、运行、到销毁的过程;一个进程可以有多个线程。比如我跑一个java的main方法,系统就创建了一个java进程,这个main方法所在的线程就是这个进程的一个

    2024年02月08日
    浏览(47)
  • Java开发面试--MongoDB专区

    1、你是否了解 MongoDB? 答: 是的,我了解 MongoDB。MongoDB是一个流行的NoSQL数据库,它以文档的形式存储数据,具有高度的灵活性和可扩展性。我熟悉MongoDB的基本概念和特性,例如集合(Collection)、文档(Document)、索引(Index)等。 对MongoDB的了解 如下: 数据模型 :MongoD

    2024年02月07日
    浏览(34)
  • Java开发面试--RabbitMQ专区

    1、 RabbitMQ 是什么,它的优势和使用场景是什么? 答: RabbitMQ 是一种开源的消息代理和队列服务器,它允许应用程序顺序地读写、发送和接收消息。基于Erlang语言开发,支持多种客户端,如Python、Ruby、.NET、Java等,支持多种消息协议,如AMQP、STOMP、MQTT等。 RabbitMQ的主要优势

    2024年02月08日
    浏览(38)
  • 【java面试】Java开发当中遇到的问题以及解决方法(147)

    问题一: 每个公司都有部门树结构,但是大公司的部门树每年可能会发生调整; 一般开发中我们都是直接根据部门ID去查询或者过滤数据或者做权限管控; 部门调整以后,可能就会查询不到数据或者过滤数据出问题; 如何解决 :每年调整的部门ID和原来的部门ID做映射关系(

    2024年01月24日
    浏览(47)
  • Maven简介及环境搭建和基本使用(Java开发中的实用工具)

    Maven 是 Apache 软件基金会的一个开源项目,是一个优秀的项目构建工具,它 用来帮助开发者管理项目中的 jar,以及 jar 之间的依赖关系、完成项目的编译、 测试、打包和发布等工作。 pom.xml文件:里面可以配置相关信息,指导maven如何工作 坐标:jar包在仓库中的唯一位置, apache将

    2024年02月02日
    浏览(39)
  • Java后端开发面试题——框架篇

    Spring框架中的bean是单例的吗?Spring框架中的单例bean是线程安全的吗? singleton : bean在每个Spring IOC容器中只有一个实例。 prototype:一个bean的定义可以有多个实例。 Spring bean并没有可变的状态(比如Service类和DAO类),所以在某种程度上说Spring的单例bean是线程安全的 如果在bean中定

    2024年02月12日
    浏览(42)
  • Java后端开发面试题——多线程

    创建线程的方式有哪些? 继承Thread类 实现runnable接口 实现Callable接口 线程池创建线程 runnable 和 callable 有什么区别? Runnable 接口run方法没有返回值 Callable接口call方法有返回值,是个泛型,和Future、FutureTask配合可以用来获取异步执行的结果 Callable接口的call()方法允许抛出异常

    2024年02月10日
    浏览(34)
  • ChatGPT:Spring Boot和Maven——Java应用开发的关键工具和区别

    Springboot是什么? ChatGPT: Spring Boot是一个用于构建Java应用程序的开源框架,它是Spring Framework的一部分,但旨在简化Spring应用程序的开发。Spring Boot的目标是使Spring应用程序的创建、配置和部署变得更加容易,通过提供一些默认配置和约定,开发者可以快速搭建一个生产就绪的

    2024年02月07日
    浏览(39)
  • java springboot VUE粮食经销系统开发mysql数据库web结构java编程计算机网页源码maven项目

    一、源码特点   springboot VUE 粮食经销系统是一套完善的完整信息管理类型系统,结合springboot框架和VUE完成本系统,对理解JSP java编程开发语言有帮助系统采用springboot框架(MVC模式开发) ,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 springboot vue 粮食经销系统

    2024年02月05日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包