面试官Maven的package和install有什么区别?看看这篇文章
liuian 2025-05-02 19:43 32 浏览
1、Maven 是干什么的?
Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。
Maven 的正确发音是['mevn],而不是“马瘟”以及其他什么瘟
2、Maven 解决了什么痛点?
① 添加第三方 jar 包
手动会出现 jar 包冲突,版本冲突。通过统一的 Maven 仓库我们可以享受到一个完全统一规范的 jar 包管理体系。
② jar 包之间的依赖关系
Maven 可以替我们自动的将当前 jar 包所依赖的其他所有 jar 包全部导入进来,无需人工参与,节约了我们大量的时间和精力。
③ 将项目拆分成多个工程模块
3、Maven 的同类技术
Java世界中主要有三大构建工具 Ant、Maven和Gradle
Ant(Another Neat Tool), 开始主要用来构建著名的 Tomcat ,产生的动机是由于作者 James Duncan Davidson 受不了 Makfile 的语法格式。
Maven 的产生,也是由于厌倦了日复一日的手工构建工作,对各个项目风格迥异的构建系统感到麻烦。Maven 的依赖管理以及项目构建规则重用性等特点,让 Maven几乎成为 Java构 建工具的事实标准。
Gradle 作为新的构建工具,基于 Groovy 语言的构建工具,既保持了 Maven 的优点,通过使用 Groovy 定义,克服了 Maven 中使用 XML 繁冗以及不灵活等缺点,它最后被 google 作为了 Android 御用管理工具。
4、使用 Maven 的环境配置
环境配置都是一个套路,不详细展开。
① Maven 是一个基于 Java 的工具,所以要做的第一件事情就是安装 JDK
② Maven 安装
注意:以 Idea 打开项目为例,每当我们从 gitlab 上 clone 项目时,通常使用的是 idea 自带的 maven 路径。
实际开发中我们的很多依赖包是从公司私库里下载的,你需要找同事要一份 setting.xml 文件替换你原有的文件。
在 windows 下,我们一般将文件不放到 C 盘,放到其他盘符中。
5、Maven 的约定配置
Maven 提倡使用一个共同的标准目录结构,Maven 使用约定优于配置的原则,大家尽可能的遵守这样的目录结构
6、Maven 构建生命周期
【面试:maven package与maven install 命令的区别? 】
在项目中经常会发生,一个子项目修改了但是其他有依赖该子项目的项目却依赖不到。
① maven install:打包好的 jar 包会安装到本地的 maven 仓库中,使用的配置是默认的配置,供其他项目使用。
② maven package 打包后的文件存放到项目的 target 目录下。
总结:
如果子项目之间的工程,发生改动,改动的子项目要进行maven install,然后需要调用该子项目的子项目进行maven package
最简单的方式就是父工程进行 maven install
最烦人的是这种情况,依赖的是远程私库的包,如果你是一名开发者,你修改了这个远程包,一定要记得 clean、install 和 deploy ,不然其他开发者的项目会报错。
7、Maven 仓库分类
Maven 的仓库只有两大类:
1、本地仓库
2、远程仓库
在远程仓库中又分成了 3 种:
① 中央仓库
② 私服
③ 其它公共库
Maven 会先搜索本地仓库(repository),发现本地没有然后从远程仓库(中央仓库)获取。
但中央仓库只有一个,最好从其镜象处下载。国内可以用阿里云下的服务器。【其它公共库】
也有通过 Nexus 搭建的私服进行获取的。【私服】
我们也 把 Maven 中的仓库分为两种:
① SNAPSHOT 快照仓库
② RELEASE 发布仓库
SNAPSHOT 快照仓库用于保存开发过程中的不稳定版本,RELEASE 正式仓库则是用来保存稳定的发行版本。定义一个组件/模块为快照版本,只需要在 pom 文件中在该模块的版本号后加上 -SNAPSHOT 即可(注意这里必须是大写)
Maven 会根据模块的版本号(pom 文件中的 version)中是否带有 -SNAPSHOT 来判断是快照版本还是正式版本。
a.如果是快照版本,那么在 mvn deploy 时会自动发布到快照版本库中,会覆盖老的快照版本。而在使用快照版本的模块,在不更改版本号的情况下,直接编译打包时,Maven 会自动从镜像服务器上下载最新的快照版本。
b.如果是正式发布版本,那么在 mvn deploy 时会自动发布到正式版本库中,而使用正式版本的模块,在不更改版本号的情况下,编译打包时如果本地已经存在该版本的模块则不会主动去镜像服务器上下载。
所以,我们在开发阶段,可以将公用库的版本设置为快照版本,而被依赖组件则引用快照版本进行开发,在公用库的快照版本更新后,我们也不需要修改 pom 文件提示版本号来下载新的版本,直接 mvn 执行相关编译、打包命令即可重新下载最新的快照库了,从而也方便了我们进行开发。
相关推荐
- Html中Css样式Ⅱ_html+css+
-
元素的定位(方式五种定位方式):静态定位:position:static;相对定位:position:relative;绝对定位:position:absolute;固定定位:position...
- HTML 标签和属性值的基本格式_html标签及属性的语法规则
-
HTML:HyperTextMarkupLanguage超文本标记语言HTML代码不区分大小写,包括HTML标记、属性、属性值都不区分大小写;任何空格或回车键在代码中都无效,插入空格或回车有...
- C#中使用Halcon开发视觉检测程序教程
-
一、环境准备1.安装Halcon从Halcon官方网站下载适合你操作系统的安装包,按照安装向导完成安装。安装过程中,记住安装路径,后续配置环境时会用到。2.配置VisualStudio项目打开V...
- 【开源】C#功能强大,灵活的跨平台开发框架 - Uno Platform
-
前言今天给广大网友分享一个基于C#开源、功能强大、灵活的跨平台开发框架,她就是:UnoPlatform。通过UnoPlatform,开发者可以利用单一代码库实现多平台兼容,极大地提高了开发效率和...
- C# 的发展简史_c#的发展前景
-
1.C#的诞生和初期(2000-2005)2000年:在微软的PDC大会上,由AndersHejlsberg首次公开展示了C#语言。2002年:微软发布了.NETFramework1.0,其...
- Visual Studio 2010-C#跟西门子1200(Sharp7)窗体控制②-启动按钮
-
VisualStudio2010--C#跟西门子1200(Sharp7)窗体控制②--启动按钮上期回顾(上期主要是新建窗体应用程序,添加sharp7的类库并引用,建立一个button按钮):本期将...
- Visual Studio窗口布局混乱后的恢复与优化指南
-
在使用VisualStudio进行开发时,我们常因误操作(如拖拽窗口、关闭面板、多显示器切换)导致界面布局混乱,代码编辑器、解决方案资源管理器、属性面板等组件“错位”,严重影响开发效率。本文将针对布...
- 使用Visual Studio 2017为AutoCAD创建一个c#模板
-
本教程的目标是展示如何在VisualStudio2017中创建AutoCAD的c#项目模板,该模板允许在调试模式下从VisualStudio加载DLL来自动启动AutoCAD。本文展示的示例使用...
- IT科技-续3Visual Studio2019-C#实战练习
-
上次完成了登录页面的窗体设计,本次完成管理界面的设计。第一步ComBox控制深度操作点击编辑选项,加入预定选项,完成操作。第二步复制Buttons控件依次为保存、删除、重置、编辑按钮属性设置,参考...
- 如何在 C# 中将文本转换为 Word 以及将 Word 转换为文本
-
在现代软件开发中,处理文档内容是一个非常常见的需求。无论是生成报告、存储日志,还是处理用户输入,开发者都可能需要在纯文本与Word文档之间进行转换。有时需要将文本转换为Word,以便生成结构化的...
- 简短的C#入门教程 # C# 入门教程 C#(读作...
-
简短的C#入门教程#C#入门教程C#(读作CSharp)是一种由Microsoft开发的多范式编程语言,它具有广泛的应用,特别是在Windows平台上。本教程将介绍C#的基础知识,以帮助您入门这...
- JavaScript中this指向各种场景_前端中this的指向
-
在JavaScript中,this的指向是一个核心概念,其值取决于函数的调用方式,而非定义位置(箭头函数除外)。以下是this指向的常见场景及具体说明:1.全局作用域中的this在全局作用域(非...
- 微信WeUI设计规范文件下载及使用方法
-
来人人都是产品经理【起点学院】,BAT实战派产品总监手把手系统带你学产品、学运营。WeUI是一套同微信原生视觉体验一致的基础样式库,由微信官方设计团队为微信Web开发量身设计,可以令用户的使用感知...
- JavaScript技术:如何动态添加事件?
-
随着前端技术的不断发展,JavaScript已经成为了不可或缺的一部分,它可以让网页变得更加流畅和美观。但是,在JavaScript中动态添加事件还是一个比较困难的问题,为此,本文将从入门到精通,介绍...
- 一周热门
-
-
【验证码逆向专栏】vaptcha 手势验证码逆向分析
-
Python实现人事自动打卡,再也不会被批评
-
Psutil + Flask + Pyecharts + Bootstrap 开发动态可视化系统监控
-
一个解决支持HTML/CSS/JS网页转PDF(高质量)的终极解决方案
-
再见Swagger UI 国人开源了一款超好用的 API 文档生成框架,真香
-
网页转成pdf文件的经验分享 网页转成pdf文件的经验分享怎么弄
-
C++ std::vector 简介
-
飞牛OS入门安装遇到问题,如何解决?
-
系统C盘清理:微信PC端文件清理,扩大C盘可用空间步骤
-
10款高性能NAS丨双十一必看,轻松搞定虚拟机、Docker、软路由
-
- 最近发表
-
- Html中Css样式Ⅱ_html+css+
- HTML 标签和属性值的基本格式_html标签及属性的语法规则
- 基于Visual Studio C#语言开发上位机,做定制设计后有多好看
- C#中使用Halcon开发视觉检测程序教程
- 【开源】C#功能强大,灵活的跨平台开发框架 - Uno Platform
- C# 的发展简史_c#的发展前景
- Visual Studio 2010-C#跟西门子1200(Sharp7)窗体控制②-启动按钮
- Visual Studio窗口布局混乱后的恢复与优化指南
- 使用Visual Studio 2017为AutoCAD创建一个c#模板
- IT科技-续3Visual Studio2019-C#实战练习
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)
- mysql刷新权限 (34)