简单认识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…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...

苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...

select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...

算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...

JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...