12.Mave面试题

1.Maven仓库

本地仓库: 默认为users.pc.m2.repository
远程仓库: 分为中央仓库和本地私服仓库 默认远程仓库使用Apache提供的中央仓库,一般我们要在配置文件里配置使用阿里元提供的镜像仓库。
在这里插入图片描述

2.Maven的常用命令。package,install,deploy命令的区别。

clean: 删除项目中已经编译好的信息,删除target目录
compile: 将src/main/java下的文件编译成class文件输出到target目录下
package: 将编译好的代码打包成jar,war的格式
install: 将打包好的文件放到本地仓库,为了让本地其它项目作为依赖使用
deploy: 将打包好的文件放到远程仓库,共享给其它开发人员和项目

package命令完成了项目编译、单元测试、打包功能,但没有把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库。
install命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库,但没有布署到远程maven私服仓库。
deploy命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库。

3.什么是Maven的坐标?

Maven使用坐标进行唯一标识,Maven的坐标元素包括groupId,artifactId,versionId,packaging。其中packaging不是必选的,默认是jar
groupId通常为公司或组织名字,artifactId通常为项目名称,versionId为版本号。

4.Maven中的packaging

项目的打包类型为pom,jar,war
pom--------------->pom项目里没有java代码,也不执行任何代码,只是用在聚合工程和父工程中传递依赖用的。用来做jar包的版本控制
jar----------------->将会打包成jar用作jar包使用,packaging默认类型。
war-----------------> 将会打包成war,发布在服务器上的工程。如网站或服务。

5.Maven的依赖范围有哪些(在scope中指定)?

compile:默认依赖范围,编译测试运行都有效

provided: 编译和测试有效。使用此依赖范围的Maven依赖。典型的例子是servlet-api,编译和测试项目的时候需要该依赖,但在运行项目的时候,由于容器已经提供,就不需要Maven重复地引入一遍(如:servlet-api)

runtime:只在运行时使用,例如jdbc驱动

test: 只在编译测试代码和运行测试的时候需要,应用正常运行不需要此依赖。典型的例子就是junit

system:系统范围与provided类似,不过你必须显式指定一个本地系统路径的JAR,此类依赖应该一直有效,Maven也不会去仓库中寻找它。但是,使用system范围依赖时必须通过systemPath元素显式地指定依赖文件的路径。

import:import范围只适用于依赖是pom类型的,用于一个 <dependencyManagement /> 对另一个 <dependencyManagement /> 的继承。当前工程可以是jar类型也可以是pom类型,没有影响。
在这里插入图片描述
type:用来声明引入依赖的类型,默认是jar

6.Maven工程之间的关系

Maven中每个项目都相当于是一个对象,对象和对象之间是有关系的。关系包含了依赖,继承,聚合
依赖:
(1)依赖是可以传递的
在这里插入图片描述
(2)依赖的原则
①最短路径原则(依赖传递的路径越短越优先)
②pom文件申明顺序优先(路径长度一样,则先申明的优先)
③覆写优先原则(子 pom 内声明的优先于父 pom 中的依赖。)

(3)当发生依赖的版本冲突时,我们可以通过dependency的exclusion元素排除掉依赖
在这里插入图片描述
继承:如果A工程继承B工程,就代表A工程默认依赖B工程的所有资源,也可以应用B工程中定义的所有资源信息(比如<properties>中定义的版本号)
在这里插入图片描述
我们springboot项目一般都会继承spring-boot-starter-parent,而spring-boot-starter-parent又继承了spring-boot-dependencies。<dependencyManagement>中的资源不会被子项目继承,
<dependencyManagement>主要是进行版本管理。里面的内容在子项目中依赖时坐标只需要填写<group id>和<artifact id>即可。这就是为什么我们springboot项目导入spring-boot-dependencies项目的<dependencyManagement>中的依赖时,不用填写版本号的原因

聚合:配置一个打包类型为pom的聚合模块(就是父工程packaging必须是pom类型),然后在该pom中使用<module>元素声明要聚合的模块。
在这里插入图片描述

7.pom.xml文件中的<optional>标签的作用

optional = true 相当于 java 中的关键字 final ,意思是 只在本项目中使用,不传递给子孙项目。子孙项目都需要强制引入才行。

<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-devtools</artifactId>
     <optional>true</optional> <!-- 防止将devtools依赖传递到其他模块中 -->
</dependency>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值