当前位置: 首页 > news >正文

认识maven

什么是 Maven?

Maven 是一个开源的项目管理工具,主要用于 Java 项目的构建、依赖管理和项目生命周期管理。它提供了一种标准的项目结构和管理流程,使得开发人员能够更轻松地管理项目的构建过程,提高代码的可重用性和可维护性。

Maven 的发展背景

在软件开发过程中,项目的构建和依赖管理常常是一项繁琐的工作。为了提高效率,Maven 应运而生。它的核心理念是“约定优于配置”,即通过约定项目结构和配置,使得开发人员可以更专注于编码本身,而不是管理构建过程。

Maven 的基本概念

1. 项目对象模型 (POM)

Maven的核心是项目对象模型 (POM),它是一个 XML 文件,通常命名为pom.xml。POM 文件定义了项目的基本信息、构建配置和依赖关系。一个基本的 POM 文件结构如下:

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>my-app</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
</project>

POM 文件的关键元素

groupId: 这个元素表示项目的唯一标识符,通常使用反向域名,例如com.example。
artifactId: 项目的名称,例如my-app。
version: 项目的版本号,例如1.0-SNAPSHOT。其中,SNAPSHOT表示这是一个开发版本,可能会有更新。
packaging: 项目的打包方式,常见的有jar(Java 库),war(Web 应用),pom(父项目)。

2. 依赖管理

在开发中,项目通常需要依赖其他库。Maven 通过 POM 文件中的 <dependencies> 标签管理这些依赖。以下是一个包含依赖的 POM 文件示例:

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
        <scope>test</scope>
    </dependency>
</dependencies>

依赖的元素解释

groupId: 依赖库的唯一标识符。
artifactId: 依赖库的名称。
version: 依赖库的版本号。
scope: 表示依赖的范围,如 compile(默认)、test(仅在测试时使用)等。

3. 构建生命周期

Maven 定义了三个主要的构建生命周期:

clean: 清理项目,删除之前的构建输出。
default: 主要的构建生命周期,处理编译、测试、打包等过程。
site: 生成项目文档和报告。

主要构建阶段

在每个生命周期中都有多个阶段。以 default 生命周期为例,常见的阶段包括:

validate: 验证项目的结构是否正确。
compile: 编译源代码,将 Java 代码转换为字节码。
test: 运行测试,确保代码的正确性。
package: 打包项目,生成可分发的格式(如 JAR、WAR)。
install: 将包安装到本地 Maven 仓库,以供其他项目使用。
deploy: 将包部署到远程仓库,供团队或其他开发者使用。

 4. 插件

Maven 的功能可以通过插件扩展。插件是执行特定任务的程序,如编译代码、运行测试或生成文档。以下是一些常用的 Maven 插件:

maven-compiler-plugin: 用于编译 Java 源代码。
maven-surefire-plugin: 用于运行单元测试。
maven-jar-plugin: 用于创建 JAR 文件。

一个使用插件的示例 POM 文件片段:

<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>

 5. 仓库

Maven 使用仓库来存储和管理构建的产物及其依赖。仓库分为三种类型:

本地仓库: 存储在用户本地计算机上的 Maven 仓库,默认路径为 ~/.m2/repository。当 Maven 需要依赖时,首先会检查本地仓库。
中央仓库: Maven 默认的远程仓库,存储了大量公共库,开发者可以直接使用。
私有仓库: 企业内部自建的仓库,用于存储私有依赖和构建产物。

Maven 常用命令

以下是一些常用的 Maven 命令,帮助你在命令行中执行 Maven 操作:

mvn clean: 清理项目,删除 target 目录下的所有内容。
mvn compile: 编译项目,生成字节码。
mvn test: 运行项目中的单元测试。
mvn package: 打包项目,生成可执行的 JAR 或 WAR 文件。
mvn install: 将打包的项目安装到本地 Maven 仓库。
mvn deploy: 将项目部署到远程仓库。
mvn site: 生成项目文档和网站。

Maven 的优缺点

优点

简化项目构建: Maven 提供了一种标准化的构建过程,减少了手动配置的需要,降低了出错的几率。
依赖管理: Maven 能够自动下载和管理项目所需的所有依赖库,使开发者不必手动处理依赖问题。
可扩展性: Maven 支持通过插件进行功能扩展,开发者可以根据项目需求添加和配置插件。

缺点

学习曲线: 对于初学者而言,理解 POM 文件和生命周期的概念可能需要时间。
性能开销: 在某些情况下,Maven 的依赖下载和构建过程可能较慢,尤其是在依赖库较多时。

相关文章:

认识maven

什么是 Maven&#xff1f; Maven 是一个开源的项目管理工具&#xff0c;主要用于 Java 项目的构建、依赖管理和项目生命周期管理。它提供了一种标准的项目结构和管理流程&#xff0c;使得开发人员能够更轻松地管理项目的构建过程&#xff0c;提高代码的可重用性和可维护性。 …...

OSINT技术情报精选·2024年10月第2周

OSINT技术情报精选2024年10月第2周 2024.10.16版权声明&#xff1a;本文为博主chszs的原创文章&#xff0c;未经博主允许不得转载。 1、亿欧智库&#xff1a;《2024中国高精定位服务产业白皮书》 报告的主要内容如下&#xff1a; 产业背景&#xff1a;在“北斗”发展态势的…...

中企通信赋能中信戴卡入选工信部颁发的2023年工业互联网试点示范名单

2024年10月17日&#xff0c;北京-随着工业互联网的迅猛发展&#xff0c;网络安全已成为国家关注的重点议题之一。日前&#xff0c;工业和信息化部&#xff08;工信部&#xff09;公布了2023年工业互联网试点示范名单&#xff0c;中企网络通信技术有限公司&#xff08;简称“中企…...

【C语言】函数的声明与定义

函数的声明 用户自定义函数需要在main函数之前进行声明&#xff0c;用分号结尾。 函数的定义 用户自定义函数在main函数之后进行定义&#xff0c;需要写出具体形参的变量名。注意函数的返回值和返回值类型要一一对应。 函数的调用 调用时&#xff0c;直接使用函数名进行调用&am…...

游戏如何应对薅羊毛问题

在大众眼里&#xff0c;“薅羊毛”是指在电商领域&#xff0c;“羊毛党”利用平台、商家的促销规则&#xff0c;低价获取商品和服务的行为。如前不久“小天鹅被一夜薅走7000万”的案例震惊全网。 然而实际上&#xff0c;“薅羊毛”现象不仅存在于电商场景&#xff0c;在游戏中…...

Chromium html<script>对应c++接口定义

<script>&#xff1a;脚本元素 <script> 元素用于嵌入可执行代码或数据&#xff0c;这通常用作嵌入或者引用 JavaScript 代码。<script> 元素也能在其他语言中使用&#xff0c;比如 WebGL 的 GLSL 着色器语言和 JSON。 更多参考&#xff1a;<script>&…...

ollama + fastgpt+m3e本地部署

ollama fastgptm3e本地部署 开启WSL更新wsl安装ubuntu docker下载修改docker镜像源开启WSL integration 安装fastgpt先创建一个文件夹来放置一些配置文件用命令下载fastgpt配置文件用命令下载docker的部署文件 启动容器M3E下载ollama下载oneapi配置登录oneapi配置ollama渠道配…...

Linux执行source /etc/profile命令报错:权限不够问(已解决)

1.问题 明明以root账号登录Linux系统&#xff0c;在终端执行命令source /etc/profile时 显示权限不够 如下图&#xff1a; 2.问题原因 可能在编辑 /etc/profile 这个文件时不小心把开头的 井号 ‘#’ 给删除了 如图&#xff1a; 这里一定要有# 3.解决办法 进入/etc/pro…...

Windows 11开发全解析

Windows 11开发全解析 一、搭建开发环境 在开始Windows 11开发之前&#xff0c;搭建一个高效的开发环境是至关重要的。Windows 11提供了多种工具和框架&#xff0c;可以帮助开发者快速搭建起一个强大的开发环境。 1. Visual Studio 2024 Visual Studio 2024是微软为Windows…...

如何进行数学家式的学习思考?

如何进行数学家式的学习思考&#xff1f; 学生阶段的数学学习是非常重要的&#xff0c;对这一点很少有人质疑。一提起数学学习&#xff0c;一些学生、家长甚至一些教师认为&#xff0c;学生的数学学习往往侧重于掌握基本概念、公式和解题技巧&#xff0c;通过做题来巩固知识和提…...

自定义类型--结构体

目录 1. 结构体类型的声明 1.1结构的声明 1.2 结构体变量的创建和初始化 1.3不完全结构体 1.4结构的⾃引⽤ 2 结构体的内存对齐 2.1offsetof 2.2 对⻬规则 2.3 为什么存在内存对⻬? 2.4修改默认对⻬数 3. 结构体传参 4 结构体实现位段 4.1什么是位段 4.2 位段的内…...

笔试练习day7

目录 OR59 字符串中找出连续最长的数字串题目解析解法(双指针遍历)代码 NC109 岛屿数量题目解析解法代码(dfs)dfs的实现 拼三角题目解析解法(枚举)代码 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 &#x1f412;&#x1f412;&#x1f412; 个人主页 &…...

python 爬虫 入门 一、基础工具

目录 一&#xff0c;网页开发者工具的使用 二、通过python发送请求 &#xff08;一&#xff09;、get &#xff08;二&#xff09;、带参数的get &#xff08;三&#xff09;、post 后续&#xff1a;数据解析 一&#xff0c;网页开发者工具的使用 我们可以用 requests 库…...

金融衍生品中的风险对冲策略分析

金融衍生品是现代金融市场中不可或缺的一部分&#xff0c;它们通过标的资产的价格波动为投资者提供了多样的风险管理工具。随着市场的不确定性和复杂性增加&#xff0c;风险对冲成为企业和个人投资者的首要任务。本文将深入探讨金融衍生品中的常见风险对冲策略&#xff0c;分析…...

linux下建立软链接

深度学习训练中经常会遇到数据量庞大或者工程中模型报错太多导致磁盘空间不够&#xff0c;但是又不想修改原来在代码中写的路径&#xff0c;这个时候制作软连接很有作用&#xff0c;把占用量大的目录移到别的空闲磁盘&#xff0c;然后在原来的目录做一个软连接指向那个移到的空…...

MySql数据库left join中添加子查询

user表查询出数据列表&#xff08;多条&#xff0c;如id&#xff09;左连接到order表中的order_agent_id字段&#xff0c;并通过 order_agent_id分组&#xff0c;求和user_order_partner&#xff0c;使用COALESCE()聚合函数对未获取到和值的进行默认赋值&#xff0c;防止查询不…...

redis--过期策略和内存淘汰策略

redis过期策略 1、惰性删除 当客户端尝试访问某个键时&#xff0c;Redis会先检查该键是否设置了过期时间&#xff0c;并判断是否过期。 如果键已过期&#xff0c;则Redis会立即将其删除。这就是惰性删除。 总结&#xff1a;该策略可以最大化的节省CPU资源&#xff0c;却对内存非…...

qt QTableview 左侧 序号 倒序

本文主要在QTableview插入数据的基础上&#xff0c;使左边序号实现倒序&#xff0c;实现如下图所示。 解决办法&#xff1a; QTableview左侧是QHeaderView类构成的&#xff0c;重写QHeaderView的paintSection&#xff0c; 重写序号的文字内容&#xff0c;进而 实现QTableview …...

隧道代理IP如何帮助企业采集数据?

在数字化时代&#xff0c;数据已成为企业决策的重要基石。无论是市场调研、竞品分析&#xff0c;还是用户行为研究&#xff0c;高质量的数据采集都是企业成功的关键。然而&#xff0c;面对复杂的网络环境和日益严格的反爬虫机制&#xff0c;如何高效、稳定地采集数据成为了一个…...

Spring Boot知识管理系统:技术与方法论

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常适…...

SpringBoot1~~~

目录 快速入门 依赖管理和自动配置 修改自动仲裁/默认版本号 starter场景启动器 自动配置 修改默认扫描包结构 修改默认配置 读取application.properties文件 按需加载原则 容器功能 Configuration Import ​编辑 Conditional ImportResource 配置绑定Configur…...

兼容多家品牌手机的多协议取电快充芯片

随着智能手机的普及和功能不断的增强&#xff0c;电池续航能力成为了用户关注的焦点&#xff0c;为了解决这各问题各大手机厂商推出了手机快充技术&#xff0c;快充协议是快充技术的核心&#xff0c;每家品牌手机都有自己的独家快充协议&#xff0c;如FCP/SCP协议是华为手机的独…...

Java和Python的不同

1. 语法差异 Java: - Java是一种强类型语言&#xff0c;要求在编译时明确变量的数据类型。 - Java代码块由大括号 {} 包围&#xff0c;如方法体、循环和条件语句。 - Java使用分号 ; 作为语句的结束符。 public class HelloWorld {public static void main(String[] args) {S…...

Moshang摩熵医药数据库

摩熵医药数据库是摩熵数科信息公司旗下的一个核心产品&#xff0c;专注于为医药行业提供全面的数据支持和决策服务。该医药数据库整合了中、美、欧、日等全球七十多个主流国家的数10万数据信息源&#xff0c;其中收载的50亿数据体系的覆盖了生物医药全生命周期数据和精细化工全…...

基于web的酒店客房管理系统【附源码】

基于web的酒店客房管理系统&#xff08;源码L文说明文档&#xff09; 目录 4 系统设计 4.1 系统概述 4.2系统结构 4.3.数据库设计 4.3.1数据库实体 4.3.2数据库设计表 5系统详细实现 5.1 用户信息管理 5.2 会员信息管理 5.3 客房信息管理 5.…...

潜水定位通信系统的功能和使用方法_鼎跃安全

潜水定位通信系统是保障潜水安全与作业高效的关键设备。它利用先进的声呐、无线电等技术&#xff0c;可精准定位潜水员位置。在水下能实现潜水员之间以及与水面的双向通信&#xff0c;确保信息及时传递。具备高可靠性和稳定性&#xff0c;即使在复杂水环境中也能正常运行。 一、…...

Golang | Leetcode Golang题解之第477题汉明距离总和

题目&#xff1a; 题解&#xff1a; func totalHammingDistance(nums []int) (ans int) {n : len(nums)for i : 0; i < 30; i {c : 0for _, val : range nums {c val >> i & 1}ans c * (n - c)}return }...

JavaWeb——Maven(1/8):整体介绍(什么是Maven、Maven的作用、小结)

目录 什么是Maven Maven的作用 依赖管理 统一项目结构 项目构建 小结 Web前端开发的知识了解完毕后&#xff0c;接下来要进入后端Web开发的学习&#xff0c;这一部分的内容是学习的重点。在这一部分内容中&#xff0c;首先要了解 Java 项目的构建工具 Maven。 首先先来介…...

Vivado 跟Xilinx SAE学HLS系列-高亚军(复合数据类型)

文章目录 目录 文章目录 Struct元素优化 枚举 ENUMERATED TYPE 希望能为你提供更多的创造力。 Struct元素优化 在对应的结构体变量--directive里面使用field_level或者struct_level进行优化. 4 4 4 4 4-------8 8 8 8 8 20-24; 查看波形--查看实际的分配情况 枚举 ENUMERATED …...

【mysql】WITH AS 语法详解

【mysql】WITH AS 语法详解 【一】WITH AS语法的基本结构【二】案例1【三】案例2 WITH AS 语法是MySQL中的一种临时结果集&#xff0c;它可以在SELECT、INSERT、UPDATE或DELETE语句中使用。通过使用WITH AS语句&#xff0c;可以将一个查询的结果存储在一个临时表中&#xff0c;…...