简单认识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…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...

【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解
一、前言 在HarmonyOS 5的应用开发模型中,featureAbility是旧版FA模型(Feature Ability)的用法,Stage模型已采用全新的应用架构,推荐使用组件化的上下文获取方式,而非依赖featureAbility。 FA大概是API7之…...

GAN模式奔溃的探讨论文综述(一)
简介 简介:今天带来一篇关于GAN的,对于模式奔溃的一个探讨的一个问题,帮助大家更好的解决训练中遇到的一个难题。 论文题目:An in-depth review and analysis of mode collapse in GAN 期刊:Machine Learning 链接:...