简单认识Maven 1
1.基本概念
Maven 是一个开源的项目管理和构建工具,主要用于 Java 项目,但也支持其他基于 JVM(Java Virtual Machine)的项目,如 Scala、Groovy 等。它基于项目对象模型(Project Object Model,POM)的概念,通过一个名为pom.xml的配置文件来管理项目的构建、依赖关系等重要方面。
项目对象模型(POM) - pom.xml
核心元素
groupId:通常代表项目所属的组织或团体的唯一标识符,类似于 Java中的包名。例如,org.apache.maven中的org.apache表示 Apache 软件基金会这个组织。
artifactId:是项目在组织内的唯一标识符,也就是项目的名称。例如,在org.apache.maven:maven -
compiler - plugin中,maven - compiler - plugin就是这个插件项目的 artifactId。
version:指定项目的版本号,遵循一定的版本命名规范,如1.0.0 -
SNAPSHOT(表示快照版本,通常用于开发过程中的不稳定版本)或2.3.4(表示正式发布版本)。 依赖管理
在pom.xml中,可以使用元素来声明项目所依赖的其他库或项目。例如:
<dependencyes><dependency><groupId>org.springframework</groupId><artifactId>spring - core</artifactId><version>5.3.0</version></dependency></dependencyes>
这就声明了项目依赖于 Spring 框架的spring - core库,版本为5.3.0。Maven 会根据这些信息自动从本地或远程仓库获取所需的依赖项。
构建配置
可以在pom.xml中配置项目的构建相关信息,如构建的源文件目录、目标文件目录、插件配置等。例如,配置maven - compiler - plugin来指定 Java 编译的源版本和目标版本:
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven - compiler - plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></build>
2.依赖管理机制
依赖范围(Scope)
compile:这是默认的依赖范围。表示该依赖项在项目的编译、测试和运行阶段都需要。例如,一个普通的 Java Web 项目中的
Spring 框架依赖,在编译源代码、运行测试用例和实际运行项目时都需要用到。
test:表示依赖项仅在测试阶段需要。如junit测试框架,只用于编写和运行单元测试,不会被包含在最终发布的项目中。
runtime:依赖项在编译时不需要,但在运行时是必需的。例如,数据库驱动程序,在编译项目时不需要数据库驱动,但在运行项目连接数据库时就需要。
依赖传递性
如果项目 A 依赖项目 B,项目 B 依赖项目 C,Maven 会根据依赖的范围等因素来确定是否将项目 C 作为项目 A 的依赖项。例如,如果 B 对 C 的依赖范围是compile,且 A 对 B 的依赖范围也是compile,那么 Maven 会自动将 C 作为 A 的依赖项(传递依赖)。
构建生命周期(Build Lifecycle)
2.常见阶段(Phase)
clean:用于清理项目,删除之前构建过程中生成的文件,如编译后的类文件、打包后的文件等。
compile:编译项目的源代码,将.java文件编译成.class文件。
test:运行项目中的测试用例,通常是基于junit或其他测试框架编写的单元测试和集成测试。
package:将项目打包成可发布的格式,如对于 Java 项目可以打包成.jar(普通 Java 项目)或.war(Java Web项目)文件。
install:将打包后的项目安装到本地 Maven 仓库中,以便其他本地项目可以依赖这个项目。
deploy:将项目部署到远程 Maven 仓库,通常用于发布项目到企业内部的仓库或者公共的 Maven 仓库供他人使用。
命令执行
可以通过在命令行输入mvn 来执行相应的构建阶段。
例如,mvn clean install会先执行clean阶段,清理项目,然后执行install阶段,完成编译、测试、打包并安装到本地仓库的一系列操作。
3.插件(Plugins)
常用插件
maven - compiler - plugin:用于编译 Java 源代码,如前面提到的可以配置编译的源版本和目标版本。 maven -
war - plugin:专门用于将 Java Web 项目打包成.war文件的插件,可配置打包的相关参数,如包含或排除某些文件。
maven - site - plugin:用于生成项目的网站文档,包括项目的 API 文档、项目报告等内容。
插件配置与执行
插件在pom.xml中进行配置,除了配置基本的插件版本和参数外,还可以通过绑定到构建生命周期的特定阶段来执行插件任务。
例如,maven - compiler - plugin默认绑定到compile阶段,当执行mvn compile时,这个插件就会自动执行编译任务。
4.仓库(Repositories)
本地仓库(Local Repository)
Maven 在本地计算机上维护一个本地仓库,默认位于用户主目录下的.m2目录(在 Linux 和 Mac 系统中)或者C:\Users\ <用户名>.m2目录(在 Windows 系统)。本地仓库用于存储从远程仓库下载的依赖项,当构建项目时,Maven 首先会在本地仓库中查找所需的依赖项。
远程仓库(Remote Repository)
Maven 中央仓库:这是最常用的远程仓库,地址为https://repo.maven.apache.org/maven2/,其中包含了大量开源项目的库。
私有仓库:企业或组织可以搭建自己的私有仓库,用于存储内部开发的库或者无法从公共仓库获取的第三方库。项目可以配置同时从公共仓库和私有仓库获取依赖项。
相关文章:
简单认识Maven 1
1.基本概念 Maven 是一个开源的项目管理和构建工具,主要用于 Java 项目,但也支持其他基于 JVM(Java Virtual Machine)的项目,如 Scala、Groovy 等。它基于项目对象模型(Project Object Model,P…...
鼠标右键删除使用Visual Studio 打开(v)以及恢复【超详细】
鼠标右键删除使用Visual Studio 打开(v) 1. 引言2. 打开注册表3. 进入对应的注册表地址4. 右键删除 AnyCode 项5. 效果6. 备份注册表文件——恢复菜单 1. 引言 安装完 Visual Studio 鼠标右键总有 “使用Visual Studio 打开(v)”,让右键菜单…...
如何缩短微商城系统推广周期
前言 微商城系统的推广周期是企业关注的重点之一。为了缩短推广周期,企业需要采取一系列有效的策略和措施。以下是对如何缩短微商城系统推广周期的详细介绍: 一、明确目标用户群体 在推广之前,企业需要明确自己的目标用户群体是谁…...
电脑如何清理重复文件?方法很简单!
清理重复文件能够有效释放存储空间,提高系统运行效率。长期堆积的重复文件会导致硬盘空间不足,从而影响系统性能。此外,清理文件还能帮助用户更好地管理和组织文件,避免因文件混乱而浪费时间。 常见的重复文件类型 重复文件可以是…...
【Linux】ioctl分析
简介 一个字符设备驱动通常会实现常规的open、release、read和write接口,但是如果需要扩展新的功能,通常以ioctl接口的方式实现。 #mermaid-svg-uY8EyPklf5e4ZMQo {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill…...
物联网通信会给人们的生活带来什么样的变化
物联网(IoT)通信的崛起正以前所未有的速度改变着人们的生活方式。从智能家居、智能交通到远程医疗、工业自动化,物联网技术的应用已经渗透到我们日常生活的方方面面。以下是对物联网通信如何具体影响并改变人们生活的详细探讨。 一、智能家居…...
Android 中获取当前 CPU 频率和占用率
最近在优化 App 的性能,需要获取当前 CPU视频频率和占用率,通过查询资料,大致思路如下: 目前没有标准的 API 来获取 CPU 的使用频率,只能通过读取指定 CPU 文件获取当前 CPU 频率,在某些机器或者特定版本中…...
pymobiledevice3使用介绍(安装、常用命令、访问iOS沙盒目录)
项目地址:https://github.com/doronz88/pymobiledevice3 首先先介绍一下pymobiledevice3, pymobiledevice3是用Python3 实现的,用于处理 iDevices(iPhone 等)。它可以跨平台使用,支持:windows…...
python 爬虫模拟登录
在使用 Python 编写爬虫时,模拟登录是一个非常常见的需求,尤其是当你需要爬取需要身份验证的数据时。模拟登录通常需要以下步骤: 分析登录页面:确定提交登录请求的 URL 和相关参数。发送登录请求:模拟用户发送登录表单…...
AOP基础、快速入门、进阶
一、概述 AOP:Aspect Oriented Programming(面向切面编程、面向方面编程),其实就是面向特定方法编程 那什么又是面向方法编程呢,为什么又需要面向方法编程呢?来我们举个例子做一个说明: 比如…...
哪款宠物空净运行吸毛好、噪音小?希喂、霍尼韦尔、安德迈测评!
作为宠物领域目前最火热的产品,宠物空气净化器的讨论度一直很高。身为铲屎官的我在产品刚出的时候就购入了一台,结果让我非常失望! 抛开产品效果不提,它运行起来的声音实在太大了!我家猫根本不愿意靠近,每…...
新兴的安全职业挑战
我们经常与安全专业人士交谈,他们希望在努力提升职业发展的同时提高自己的价值并克服组织内部的挑战。在这些谈话中,花费大量时间讨论公司未来将面临的安全问题并不罕见。 安全领导者希望为问题制定计划并获得领导层对其计划的支持。这通常意味着实施修…...
代码随想录算法训练营Day32 | 122.买卖股票的最佳时机Ⅱ、55.跳跃游戏、45.跳跃游戏Ⅱ、1005.K次取反后最大化的数组和
目录 122.买卖股票的最佳时机Ⅱ 55.跳跃游戏 45.跳跃游戏Ⅱ 1005.K次取反后最大化的数组和 122.买卖股票的最佳时机Ⅱ 题目 122. 买卖股票的最佳时机 II - 力扣(LeetCode) 给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i…...
3D Slicer 教程一
先了解一下什么是3D Slicer,这个是做什么,然后一步步了解功能,一起看看源码 一.初识 这块软件用来处理医学影像,是一款开源的软件. 里面涉及到一些 2d 常见的操作,图像处理,调窗,测量; 涉及到3d的一些常见重建,mpr,vr,cpr等, 还包括一些分割,变换等(越高级精确的一些通过插件…...
github pages + hugo 搭建静态博客网站
体验地址 1. 起因, 目的: 其实6年前,我就写过这个。 项目代码 博客地址 最近想改写一下。 github 推荐的主题是 Jekyll, 我当时用的就是这个,感觉很麻烦。尤其是文章命名。 新的主题 hugo 用起来还行。 2.过程: 过程记录&am…...
Python爬虫如何爬取并解析JSON数据
前言 Python爬虫是一种用于从互联网上获取数据的程序,而JSON(JavaScript Object Notation)是一种常用的数据交换格式。本文将介绍如何使用Python爬虫来爬取并解析JSON数据,同时还会讲解如何使用代理IP来提高爬取效率。 1. 什么是…...
【C++】精妙的哈希算法
🚀个人主页:小羊 🚀所属专栏:C 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 一、哈希结构1、哈希概念2、哈希函数3、哈希冲突3.1 闭散列3.2 开散列 4、完整代码 一、哈希结构 1、哈希概念 A…...
智慧链动青春:国家区块链中心接待北京市十一学校青少年访学探索
以生动科学的方法点燃青少年科学探索欲望是构建未来科技人才梯队的基石。近期国家区块链技术创新中心接待北京市十一学校新生访学,以科普讲座、实操互动的方式让学生在深度思考中感受科学魅力、接触前沿科技,激发学生对区块链、隐私计算和芯片设计制造的…...
利用C++封装鼠标轨迹算法为DLL:游戏行为检测的利器
在现代软件开发中,鼠标轨迹模拟技术因其在自动化测试、游戏脚本编写等领域的广泛应用而备受青睐。本文将介绍如何使用C语言将鼠标轨迹算法封装为DLL(动态链接库),以便在多种编程环境中实现高效调用,同时探讨其在游戏行…...
Qt- QSS风格选择器常用属性选择器样式表盒子
1. 风格设置 Qt 提供了 3 种整体风格,使用 QStyleFactory::keys() 来获取 (windowsvista 、Windows 、Fusion) 可以在 main.cpp 中调用 setStyle 方法对应用程序进行全局风格的设置 int main(int argc, char *argv[]) {QApplication a(arg…...
Proteus 8实战:手把手教你搭建ATmega16流水灯仿真,并联动真实代码调试
Proteus 8实战:从零构建ATmega16流水灯仿真系统 在嵌入式开发的学习路径上,仿真工具的价值常常被低估。许多开发者习惯直接上手物理硬件,却在遇到问题时陷入漫长的调试循环。Proteus 8提供的虚拟实验室环境,恰好填补了从理论到实践…...
STM32CubeIDE工程复制粘贴保姆级教程:告别重复配置,5分钟搞定新项目
STM32CubeIDE工程复制粘贴保姆级教程:告别重复配置,5分钟搞定新项目 每次启动新项目时,你是否还在重复那些繁琐的初始化步骤?从零开始配置时钟树、外设参数、中断优先级,不仅耗时费力,还容易出错。对于经验…...
Qwen3.5-2B镜像免配置部署:开箱即用WebUI(7860端口)快速上手教程
Qwen3.5-2B镜像免配置部署:开箱即用WebUI(7860端口)快速上手教程 1. 模型简介 Qwen3.5-2B是通义千问系列中的轻量化多模态基础模型,仅有20亿参数规模,专为低功耗、低门槛部署场景设计。这个版本特别适合在端侧设备和…...
如何快速掌握MelonLoader:从零基础到精通Unity游戏模组加载的完整教程
如何快速掌握MelonLoader:从零基础到精通Unity游戏模组加载的完整教程 【免费下载链接】MelonLoader The Worlds First Universal Mod Loader for Unity Games compatible with both Il2Cpp and Mono 项目地址: https://gitcode.com/gh_mirrors/me/MelonLoader …...
springboot+vue基于web的美食外卖点餐平台的设外卖员商家
目录同行可拿货,招校园代理 ,本人源头供货商外卖员功能分析商家功能分析技术实现要点项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作同行可拿货,招校园代理 ,本人源头供货商 外卖员功能分析 外卖员在美食外卖点餐平台中的核心…...
嵌入式开发必知:原码、反码与补码详解
1. 为什么嵌入式开发必须掌握原码、反码和补码作为一名在嵌入式领域摸爬滚打多年的工程师,我见过太多因为不理解底层数据表示而导致的诡异bug。记得刚入行时,我调试一个温度传感器项目,当温度低于零度时,读取的数值总是偏差127度。…...
【Git】深入解析 ‘.git/index.lock‘ 文件冲突:从报错到彻底解决
1. 当Git突然罢工:index.lock报错现场还原 那天下午我正忙着切换分支部署新功能,突然终端弹出红字警告:fatal: Unable to create .git/index.lock: File exists。这就像你急着上厕所却发现门被反锁,更糟的是你不知道里面到底有没有…...
开箱即用!Qwen-Image-2512-SDNQ Web服务快速体验指南
开箱即用!Qwen-Image-2512-SDNQ Web服务快速体验指南 1. 五分钟了解Qwen-Image-2512-SDNQ Web服务 你是否遇到过这样的场景:需要快速生成一张概念图,但打开专业设计软件太麻烦?或者想尝试AI绘画,却被复杂的模型部署步…...
皇后大学揭秘:AI机器人与人类程序员的代码审查大作战
当你写完一段代码,准备提交到项目中时,通常会有同事帮你检查一遍——这个过程叫做代码审查,就像文章发表前的编辑校对一样重要。不过现在情况有了变化:越来越多的AI机器人也开始参与代码审查工作,它们能自动发现bug、提…...
国之重器 openKylin 入驻 AtomGit:打造全球领先的智能操作系统开源根社区
操作系统是数字基础设施的核心基石,传统 Linux 操作系统用户和开发者经常面临系统软件更新不稳定、存量软件不兼容、开发适配成本高、显示渲染效率低等问题。在 AI 浪潮席卷全球的当下,将 AI 能力与操作系统已成紧密结合,打造智能交互新范式已…...
