Maven面试题

简介: 什么是maven私服?

什么是maven私服?


私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的 Maven 用户使用。当 Maven 需要下载构件的时候,它从私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,缓存在私服上之后,再为 Maven 的下载请求提供服务。我们还可以把一些无法从外部仓库下载到的构件上传到私服上。


Maven 私服的 5 个特性:


1、节省自己的外网带宽:减少重复请求造成的外网带宽消耗。


2、加速 Maven 构件:如果项目配置了很多外部远程仓库的时候,构建速度就会大大降低。


3、部署第三方构件:有些构件无法从外部仓库获得的时候,我们可以把这些构件部署到内部仓库(私服)中,供内部 Maven 项目使用。


4、提高稳定性,增强控制:Internet 不稳定的时候,Maven 构建也会变的不稳定,一些私服软件还提供了其他的功能。


5、降低中央仓库的负荷:Maven 中央仓库被请求的数量是巨大的,配置私服也可以大大降低中央仓库的压力。


什么是 Maven 仓库?


Maven 的仓库只有两大类:


1、本地仓库。 2、远程仓库。


在远程仓库中又分成了 3 种:


中央仓库。


私服。


其它公共库。


Maven 会先搜索本地仓库(repository),发现本地没有然后从远程仓库(中央仓库)获取。


但中央仓库只有一个,最好从其镜象处下载。国内可以用阿里云下的服务器。【其它公共库】 也有通过 Nexus 搭建的私服进行获取的。【私服】


如何解决 jar 冲突?


遇到冲突的时候第一步,要找到 Maven 加载的到时是什么版本的 jar 包,通过们 mvn dependency:tree 查看依赖树,或者使用 IDEA Maven Helper 插件。


然后,通过 Maven 的依赖原则来调整坐标在 pom 文件的申明顺序是最好的办法,或者使用将冲突中不想要的 jar 引入的 jar 进行 掉。


简单说一下Maven 依赖原则


1、赖路径最短优先原则。


一个项目 Demo 依赖了两个 jar 包,其中 A-B-C-X(1.0) , A-D-X(2.0) 。由于 X(2.0) 路径最短,所以项目使用的是 X(2.0) 。


2、pom文 件中申明顺序优先。


如果 A-B-X(1.0) ,A-C-X(2.0) 这样的路径长度一样怎么办呢?这样的情况下,Maven 会根据 pom 文件声明的顺序加载,如果先声明了 B ,后声明了 C ,那就最后的依赖就会是 X(1.0) 。


3、覆写优先


子 pom 内声明的优先于父 pom 中的依赖。


Maven 坐标的含义?

<groupId>junit</groupId> 
<artifactId>junit</artifactId> 
<version>4.13-BETA</version>

Maven 给我们制定了一套规则 —— 使用坐标进行唯一标识。Maven 的坐标元素包括 groupId、artifactId、version、packaging、classfier 。


在我们自己开发项目的时候,也是要给我们的项目定义坐标的,这是强制性要求,只有这样,其他项目才能引用该项目的构件。


groupId :定义当前 Maven 项目隶属的实际项目。首先,Maven 项目和实际项目不一定是一对一的关系。比如 Spring FrameWork 这一实际项目,其对应的 Maven 项目会有很多,如 spring-core、spring-context 等。这是由于 Maven 中模块的概念,因此,一个实际项目往往会被划分成很多模块。其次,groupId 不应该对应项目隶属的组织或公司。原因很简单,一个组织下会有很多实际项目,如果 groupId 只定义到组织级别,而后面我们会看到,artifactId 只能定义 Maven 项目(模块),那么实际项目这个层次将难以定义。最后,groupId 的表示方式与 Java 包名的表达方式类似,通常与域名反向一一对应。上例中,groupId 为 junit ,是不是感觉很特殊,这样也是可以的,因为全世界就这么个 junit ,它也没有很多分支。


artifactId :该元素定义当前实际项目中的一个 Maven 项目(模块)。推荐的做法是使用实际项目名称作为 artifactId 的前缀。比如上例中的 junit ,junit 就是实际的项目名称,方便而且直观。在默认情况下,Maven 生成的构件,会以 artifactId 作为文件头。例如 junit-3.8.1.jar ,使用实际项目名称作为前缀,就能方便的从本地仓库找到某个项目的构件。


version :该元素定义了使用构件的版本。如上例中 junit 的版本是 4.13-BETA ,你也可以改为 4.1.2 表示使用 4.1.2 版本的 junit 。


packaging :定义 Maven 项目打包的方式,使用构件的什么包。打包方式通常与所生成构件的文件扩展名对应。如上例中没有 packaging ,则默认为 jar 包,最终的文件名为junit-4.13-BETA.jar 。当然,也可以打包成 war 等。


classifier :该元素用来帮助定义构建输出的一些附件。附属构件与主构件对应。如上例中的主构件为 junit-4.13-BETA.jar ,该项目可能还会通过一些插件生成如 junit-4.13-BETA-javadoc.jar、junit-4.13-BETA-sources.jar,这样附属构件也就拥有了自己唯一的坐标。 上述 5 个元素中:


groupId、artifactId、version 是必须定义的。 packaging 是可选的(默认为 jar )。 而 classfier 是不能直接定义的,需要结合插件使用。


Maven 常用命令


mvn compile :编译源代码。


mvn deploy :发布项目。


mvn test-compile :编译测试源代码。


mvn test :运行应用程序中的单元测试。


mvn site :生成项目相关信息的网站。


mvn clean :清除项目目录中的生成结果。 mvn package :根据项目生成的 jar/war 等。


mvn install :在本地 Repository 中安装 jar 。


mvn eclipse:eclipse :生成 Eclipse 项目文件。


mvn jetty:run 启动 Jetty 服务。


mvn tomcat:run :启动 Tomcat 服务。


mvn clean package -Dmaven.test.skip=true :清除以前的包后重新打包,跳过测试类。


用到最多的命令

mvn clean :清除 Project 中以前的编译的东西,重新再来。

mvn compile :开始编译 Maven 的 Project 。

mvn clean package :清除以前的包后重新打包。


你们项目为什么选用 Maven 进行构建?

首先,Maven 是一个优秀的项目构建工具。使用maven,可以很方便的对项目进行分模块构建,这样在开发和测试打包部署时,效率会提高很多。

其次,Maven 可以进行依赖的管理。使用 Maven ,可以将不同系统的依赖进行统一管理,并且可以进行依赖之间的传递和继承。


Maven 是什么?

Maven 主要服务于基于 Java 平台的项目构建、依赖管理和项目信息管理。

Maven 的主要功能主要分为 4 点:

依赖管理系统

多模块构建

一致的项目结构

一致的构建模型和插件机制



相关文章
|
6月前
|
存储 Java 项目管理
Maven-高频面试题
Maven-高频面试题
|
7月前
|
Java 程序员 应用服务中间件
程序员的31大Maven面试问题及答案
程序员的31大Maven面试问题及答案
|
7月前
|
Java jenkins 测试技术
Maven面试题及答案
Maven面试题及答案
76 0
|
存储 缓存 Java
搞懂这7个Maven问题,带你吊打面试官!
在如今的互联网项目开发当中,特别是Java领域,可以说Maven随处可见。Maven的仓库管理、依赖管理、继承和聚合等特性为项目的构建提供了一整套完善的解决方案,可以说如果你搞不懂Maven,那么一个多模块的项目足以让你头疼,依赖冲突就会让你不知所措,甚至搞不清楚项目是如何运行起来的....
171 0
搞懂这7个Maven问题,带你吊打面试官!
|
4月前
|
Java Maven
解决idea每次新建maven项目都需要重新配置maven的问题
解决idea每次新建maven项目都需要重新配置maven的问题
179 1
|
28天前
|
Java Maven
maven项目的pom.xml文件常用标签使用介绍
第四届人文,智慧教育与服务管理国际学术会议(HWESM 2025) 2025 4th International Conference on Humanities, Wisdom Education and Service Management
81 8
|
25天前
|
Java 应用服务中间件 Maven
Maven的三种项目打包方式——pom,jar,war的区别
Maven 提供了多种打包方式,分别适用于不同类型的项目。pom 用于父项目或聚合项目,便于项目的结构和依赖管理;jar 用于Java类库或可执行的Java应用程序;war 则专用于Java Web应用程序的部署。理解这些打包方式的用途和特点,可以帮助开发者更好地配置和管理Maven项目,确保构建和部署过程的顺利进行。无论是单模块项目还是多模块项目,选择合适的打包方式对于项目的成功至关重要。
65 3
|
2月前
|
Java 关系型数据库 MySQL
Maven——创建 Spring Boot项目
Maven 是一个项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,简化了项目的构建和管理过程。其核心功能包括项目构建和依赖管理,支持创建、编译、测试、打包和发布项目。Maven 仓库分为本地仓库和远程仓库,远程仓库包括中央仓库、私服和其他公共库。此外,文档还介绍了如何创建第一个 SpringBoot 项目并实现简单的 HTTP 请求响应。
142 1
Maven——创建 Spring Boot项目
|
2月前
|
Java 关系型数据库 MySQL
如何使用 maven 创建一个 Spring Boot项目
Maven 是一个强大的项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,提高开发效率。其核心功能包括项目构建和依赖管理。项目构建支持编译、测试、打包和发布等流程,而依赖管理则通过中央仓库、本地仓库和私有服务器获取和管理项目依赖。示例中展示了如何创建第一个 SpringBoot 项目并实现简单接口。
40 1
如何使用 maven 创建一个 Spring Boot项目
|
2月前
|
Java Maven Kotlin
idea maven创建kotlin项目
本文介绍了在IntelliJ IDEA中使用Maven创建Kotlin项目的步骤,包括在`pom.xml`文件中添加Maven中央仓库、配置`kotlin-maven-plugin`插件、指定源目录、添加测试插件和执行插件,以及添加Kotlin测试依赖和标准库依赖。文中还提到了如何通过更换镜像或使用代理来解决依赖下载速度慢的问题,并展示了运行示例代码的截图。
115 4
idea maven创建kotlin项目