Maven

  • Maven的概念
    • 依赖管理
    • 项目构建
    • Maven安装
  • Maven项目的创建
    • Maven的第一个项目
    • Maven的第二个项目

Maven的概念

Maven 是 Apache 基金会推出的跨平台的项目管理工具,主要服务于基于Java平台的项目构建、依赖管理和项目信息管理,目前是 Java 生态中最主流的构建工具之一。

Maven简化了 Java 应用程序的打包、测试和部署。借助 Maven,开发人员可以使用预定义的生命周期和项目结构更轻松地管理复杂的项目。

maven官方文档:https://maven.apache.org/

依赖管理

什么是依赖管理:
依赖管理是对第三方依赖包的管理,可以连接互联网下载项目所需第三方jar包,避免手动导入 JAR 包的繁琐和版本冲突。对自己开发的模块的管理,可以像引用第三方依赖包一样引用自己项目的依赖包。

在这里插入图片描述

项目构建

什么是项目构建:项目构建是一个从编写源代码到编译、测试、运行、打包、部署的过程。

理想的项目构建具有如下特点:高度自动化,跨平台,可重用的组件,标准化的流程

传统项目和maven项目构建的两种方式:
传统项目打开Idea编写源代码和配置文件,对源代码进行编译,可以使用Junit进行单元测试,把项目打成war包,部署到Tomcat服务器中运行。
maven项目是maven将项目构建过程进行标准化,每个阶段都可以使用一个命令来完成。
清理 --> 编译 --> 测试 --> 报告 --> 打包 --> 部署

在这里插入图片描述

maven项目构建的好处:
可以通过命令完成项目构建。例如测试使用mvn tomcat:run的命令来发布运行项目。
maven对每个构建阶段进行规范,有利于大型团队协作开发。

Maven的应用场景
开发人员只要按着maven标准的目录结构进行开发即可,然后提交代码,在测试服务器上拉取Java源码,然后可以使用maven的自动化项目构建完成项目的清理、编译、测试、打包和安装部署等。

在这里插入图片描述

为什么使用Maven
Ant?没有一个约定的目录结构,必须明确让ant做什么,什么时候做,然后编译,打包,没有生命周期,必须定义目标及其实现的任务序列,没有集成依赖管理;
Maven?拥有约定,知道你的代码在哪里,放到哪里去,拥有一个生命周期,例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程,只需要定义一个pom.xml,然后把源码放到默认的目录,Maven帮你处理其他事情,拥有依赖管理,仓库管理。

Maven概念模型
在这里插入图片描述

  • POM 文件:项目对象模型 POM 文件是 XML 文件,其中包含与项目相关的信息和配置信息,执行 Maven 命令时,需要为 Maven 提供一个 POM 文件来执行命令,Maven 读取pom.xml文件以完成其配置和操作。
  • 依赖项和存储库:依赖项是项目所需的外部 Java 库,存储库是打包的 JAR 文件的目录。本地存储库只是机器硬盘驱动器上的一个目录,如果在本地 Maven 存储库中找不到依赖项,Maven 会从中央 Maven 存储库下载它们并将它们放在本地存储库中。
  • 构建生命周期、阶段和目标:Maven 命令通常指构建生命周期、阶段或目标,如果使用 Maven 命令执行生命周期,则该生命周期中的所有构建阶段也会执行,如果执行构建阶段,则还会执行定义序列中的所有先前阶段。
  • 构建配置文件:构建配置文件是一组配置值,允许使用不同的配置构建项目。例如为本地开发、测试或生产构建项目,要启用这些构建,可以在使用其元素中定义不同的构建配置文件。
  • 构建插件:构建插件用于执行特定目标,可以向文件添加插件 ,Maven 提供标准插件,还可以在 Java 中实现自定义插件。

Maven安装

安装准备:安装jdk1.8或以上版本
下载Maven官网:http://maven.apache.org/download.html
下载地址:https://archive.apache.org/dist/maven/maven-3/3.6.0/binaries/
版本是Maven3.6,安装Maven解压到相应目录即可(无中文路径)

Maven安装目录分析
在这里插入图片描述

bin:可执行命令存放地,包含 Maven 的启动脚本,是调用 Maven 命令的入口。
boot:含有plexus-classworlds类加载器框架,负责加载 Maven 核心类
conf:全局配置目录,存放 Maven 的全局配置文件,对当前机器上所有使用该 Maven 的项目生效(优先级低于项目本地配置),含有 settings.xml Maven 核心配置文件,可配置本地仓库路径、远程仓、代理、镜像、认证信息等。
lib:Maven 运行依赖库,包含 Maven 自身运行所需的所有 Jar 包(如核心类库、依赖的第三方组件),无需手动修改或添加。
LICENSE.txt, NOTICE.txt, README.txt针对Maven版本,第三方软件等简要介绍

Maven的环境变量
配置Maven的环境变量的意义是为了让Maven下的bin目录下的所有可执行程序在任意位置都可以执行

JAVA_HOME 必须配置,Maven 是基于 Java 开发的工具,必须依赖 JDK 才能运行,JAVA_HOME 用于指定 JDK 的安装路径,需指向 JDK 根目录,编辑器在读取本机Maven的时候,先找JAVA_HOME,若不设置JAVA_HOME直接设置JAVA 的 PATH 变量,在cmd运行时可能会有报错

在这里插入图片描述

设置MAVEN_HOME环境变量,把maven的解压后的路径添加为变量值,指向 Maven 的安装根目录,用于统一管理 Maven 路径(后续配置 PATH 时会引用此变量,方便后续升级 Maven 时只需修改此处)

在这里插入图片描述

PATH 系统的环境变量,用于指定可执行程序的搜索路径,将 Maven 的 bin 目录添加到 PATH 后,即可在任意目录下直接使用 mvn 命令。
配置值需包含 Maven 的 bin 目录路径,通常通过引用 MAVEN_HOME 简化配置

在这里插入图片描述

配置用户范围的settings.xml:
默认的配置文件是 ~/.m2/settings.xml 单个用户的,定义当前用户专属的 Maven 规则,仅对当前登录的用户生效,且会覆盖全局配置中相同的项;
%MAVEN_HOME%/conf/settings.xml 全局的,定义当前机器的全局 Maven 规则,所有使用该 Maven 安装包的用户都会遵循此配置。
想让所有用户共用配置如公司 / 团队统一规则,那么修改 %MAVEN_HOME%/conf/settings.xml,
想做个人专属配置如个人镜像、账号,那么在 ~/.m2 下创建并修改 settings.xml

验证配置是否完成

在这里插入图片描述

Maven项目的创建

Maven的第一个项目

按照约定创建Maven项目目录

在这里插入图片描述
src/main/java —— 存放项目的.java文件
src/main/resources —— 存放项目资源文件,如spring, mybatis配置文件
src/test/java —— 存放所有测试.java文件,如JUnit测试类
src/test/resources —— 测试资源文件
target —— 项目输出位置
pom.xml —— 项目配置文件

在项目Hello根目录建立pom.xml

在这里插入图片描述

在src/main/java/cn/tx/maven目录下新建文件Hello.java

package cn.tx.maven;
public class Hello {public String sayHello(String name){return "Hello "+name+"!";}
}

在/src/test/java/cn/tx/maven目录下新建测试文件HelloTest.java

package cn.tx.maven;
import org.junit.Test;
import static junit.framework.Assert.*;
public class HelloTest {@Testpublic void testHello(){Hello hello = new Hello();String results = hello.sayHello("maven");assertEquals("Hello maven!",results);		}
}

进行maven的项目操作

  1. 打开cmd命令行,进入Hello项目根目录执行 mvn compile命令,执行默认生命周期的 compile 阶段,编译项目的主源码 src/main/java 目录,编译后的 class 文件会输出到 target/classes 目录;
  2. cmd 中继续录入mvn clean命令,执行清洁生命周期的 clean 阶段,删除项目的 target 目录(该目录存放编译、打包等操作的输出文件),用于清理之前的构建产物;
  3. cmd 中录入 mvn clean compile命令,先执行 clean 清理旧产物,再执行 compile 重新编译源码,相当于 “先清理后编译”,确保基于最新代码构建;
  4. cmd 中录入 mvn clean test命令,先清理,再执行默认生命周期的 test 阶段(会自动执行 compile 编译主源码,再编译测试源码 src/test/java,最后运行测试用例),测试结果会输出到 target/surefire-reports 目录;
  5. cmd 中录入 mvn clean package命令,先清理,再执行 package 阶段(会依次执行 compile、test 等前置阶段),将项目打包为指定格式,打包产物存放在 target 目录下;
  6. cmd 中录入 mvn clean install 查看仓库会把项目安装到仓库里,先清理,再执行 install 阶段(包含 package 及之前的所有阶段),除了打包外,还会将打包产物安装到本地 Maven 仓库,供本地其他项目通过依赖引用该项目。

Maven的第二个项目

按照约定创建Maven项目目录

在这里插入图片描述

在项目HelloFriend根目录建立pom.xml

<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>cn.tx.maven</groupId><artifactId>HelloFriend</artifactId><version>0.0.1-SNAPSHOT</version><name>HelloFriend</name><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.9</version><scope>test</scope></dependency>		<dependency><groupId>cn.tx.maven</groupId><artifactId>Hello</artifactId><version>0.0.1-SNAPSHOT</version><scope>compile</scope><optional>true</optional></dependency>		</dependencies>
</project>

在src/main/java/cn/tx/maven目录下新建文件HelloFriend.java

package cn.tx.maven;
import cn.tx.maven.Hello;public class HelloFriend {public String sayHelloToFriend(String name){Hello hello = new Hello();String str = hello.sayHello(name)+" I am "+this.getMyName();System.out.println(str);return str;}public String getMyName(){return "John";}
}

在/src/test/java/cn/tx/maven目录下新建测试文件HelloFriendTest.java

package cn.tx.maven;
import static junit.framework.Assert.assertEquals;
import org.junit.Test;
import cn.tx.maven.Hello;public class HelloFriendTest {@Testpublic void tesHelloFriend(){	HelloFriend helloFriend = new HelloFriend();String results = helloFriend.sayHelloToFriend("zhangsan");assertEquals("Hello zhangsan! I am John",results);		}
}

在HelloFriend目录下执行命令mvn package

在这里插入图片描述

若把仓库里第一个项目Hello的 jar 包删除的话,再在HelloFriend目录下执行命令mvn package,系统会又报错提示:Could not find artifact cn.tx.maven:Hello:jar:0.0.1-SNAPSHOT,表示无法找到HelloFriend所依赖的Hello 0.0.1-SNAPSHOT.jar,我们需要重新构建第一个项目Hello并安装到数据仓库,在命令行Hello根目录下执行mvn clean install 才可以

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/94330.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/94330.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/94330.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql之binlog日志说明及利用binlog日志恢复数据操作记录

众所周知,binlog日志对于mysql数据库来说是十分重要的。在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废话不多说,下面是梳理的binlog日志操作解说: 一、初步了解binlog MySQL的二进制日志…

windows安装Elasticsearch,ik分词器,kibana可视化工具

安装地址 elasticsearch安装地址: Past Releases of Elastic Stack Software | Elastic 分词器下载地址: https://github.com/infinilabs/analysis-ik?tabreadme-ov-file kibana下载地址: Past Releases of Elastic Stack Software | Elastic 注意&#xff1a;版本一定要统…

GaussDB 数据库架构师修炼(十八)SQL引擎-SQL执行流程

1 SQL执行流程查询解析&#xff1a;词法分析、语法分析、 语义分析 查询重写&#xff1a;视图和规则展开、基于规则的查询优化 计划生成&#xff1a;路径搜索和枚举、选出最优执行计划 查询执行&#xff1a;基于优化器生成的物理执行计划对数据进行获取和计算2 解析器和优化器S…

能源管理系统中的物联网数据采集:深度探索与操作指南

一、引言物联网&#xff08;Internet of Things, IoT&#xff09;作为数字化时代的核心基础设施&#xff0c;通过将物理世界的设备、物体与网络连接&#xff0c;实现数据的实时感知与交互。而数据采集作为物联网系统的 “神经末梢”&#xff0c;是整个体系运行的基础。本文将从…

Java实现一个简单的LRU缓存对象

LRU&#xff08;Least Recently Used&#xff09;算法的核心思想是&#xff1a;最近使用的数据将被保留&#xff0c;最久未使用的数据将被淘汰。这种策略适用于内存有限、但又需要高频访问的数据场景&#xff0c;比如缓存系统、页面置换算法等。mysql的缓冲池就是使用的LUR Inn…

整体设计 之定稿 “凝聚式中心点”原型 --整除:智能合约和DBMS的在表层挂接 能/所 依据的深层套接 之2

摘要三“式”三“心”三“物” 整数原型三段式表达 的 凝聚式中心点dot 、组织式核心元素位element和分析式内核基因座locus 三者分别以**“等号线&#xff08;Arc&#xff09;”**&#xff08;动态关联&#xff09;、**“边界线&#xff08;Transition&#xff09;”**&#…

vue.根据url生成二维码

文章目录概要QR码步骤1. 引入库2. 生成二维码3. 将二维码加入页面中用javascript库简化二维码生成1. 引入库2. 使用库生成二维码二维码美化和定制1. 调整大小2. 调整颜色3. 添加自定义形状和图案4. 添加logo性能优化与错误处理1. 减少不必要的计算2. 异步处理概要 生成 URL 二…

WPF+MVVM入门学习

最近在学WPF的MVVM&#xff0c;有两种方式实现&#xff0c;一种是自己实现&#xff0c;一种是借助MVVM框架&#xff0c;接下来通过一个医院自助打印报告机键盘输入界面来演示自己实现、框架CommunityToolkit和Prism的区别。 项目源码&#xff1a;https://gitee.com/cplmlm/Sel…

[e3nn] docs | 不可约表示(Irreps)

链接&#xff1a;https://docs.e3nn.org/en/latest/examples/examples.html docs&#xff1a;e3nn e3nn是一个用于构建欧几里得(E(3))等变神经网络的Python库&#xff0c;这意味着它们能自动保持三维旋转和反射的对称性。 该库使用不可约表示(Irreps)来描述数据变换方式&…

深入浅出 ArrayList:从基础用法到底层原理的全面解析(中)

四、ArrayList 常用方法实战 —— 从添加到遍历的全场景覆盖ArrayList 提供了数十个方法&#xff0c;但日常开发中常用的只有 10 个左右&#xff0c;我们按 “元素操作”“集合查询”“遍历方式” 三类来梳理&#xff0c;每个方法都附带示例和注意事项。4.1 元素添加&#xff1…

java后端如何实现下载功能

后端需要把要下载的若干文件 按 ZIP 格式编码成一段二进制字节流&#xff0c;然后以 Content-Type: application/zip Content-Disposition: attachment; filenamexxx.zip 的形式写进 HTTP 响应体。浏览器收到这段“ZIP 格式的字节流”后&#xff0c;就会弹出保存对话框&#xf…

AI生成技术报告:GaussDB与openGauss的HTAP功能全面对比

GaussDB 与 openGauss 的 HTAP 功能比较 前言 GaussDB集中式版本从505.2版本开始引入了HTAP混合负载功能&#xff0c;openGauss也从7.0.0 RC1版本开始引入了HTAP行列融合功能&#xff0c;加强了行存转列存的使用友好度&#xff0c;但两者的实现似乎存在不小的差异。 虽然文档…

小程序开发指南(四)(UI 框架整合)

✍讲解了微信小程序 UI 框架的使用方法和特点&#xff0c;根据项目需求选择合适的组件库。附有相应的组件库预览码&#xff0c;也是将所有的微信小程序原生组件库整合在一起方便后续开发的使用。如果有不好或者有错误的地方请告知&#xff01;希望可以与大家相互的交流学习&…

golang 1.25.0 安装

wget https://golang.google.cn/dl/go1.25.0.linux-amd64.tar.gz tar -C /usr/local/ -xzf go1.25.0.linux-amd64.tar.gz ln -s /usr/local/go/bin/* /usr/bin/ go env -w GO111MODULEon go env -w GOPROXYhttps://goproxy.cn,direct

基于深度学习的人脸表情识别系统:YOLOv5/v6/v7/v8/v10模型实现与UI界面集成

基于YOLOv5/v7/v8的智能人脸表情识别系统:从算法原理到应用实现 表情识别的技术价值与挑战 人脸表情识别(Facial Expression Recognition, FERYOLOv5/v7/v8等深度学习算法构建高效的表情识别系统,并设计直观的UI界面集成方案。无论你是深度学习初学者还是有经验的开发者,…

初步了解多线程

系列文章目录 目录 系列文章目录 前言 一、进程 二、线程 1. 线程解决资源开销的方式 2. 线程和进程的联系和区别 三、多线程编程 1. 直观了解多线程 2. 线程的创建方式 1. 继承 Thread 重写 run() 方法 2. 实现 Runable 接口&#xff0c;重写 run() 方法 3. 继承 …

安卓Android低功耗蓝牙BLE连接异常报错133

安卓Android低功耗蓝牙BLE连接异常报错133 之前连接一直好好的,不知道为什么今天突然就连接不了蓝牙了,报错133,按照 找网上的说明总是说清除GATT缓存,其实并不是我的问题,最后看到这里https://softs.im/android-ble-%e8%bf%9e%e6%8e%a5%e9%94%99%e8%af%af133/ 有如下说明: 情…

【分治】快排与归并专题

分治思想 分&#xff08;Divide&#xff09;&#xff1a;将待排序数组不断拆分为两个等长&#xff08;或近似等长&#xff09;的子数组&#xff0c;直到子数组长度为 1&#xff08;天然有序&#xff09;。 治&#xff08;Conquer&#xff09;&#xff1a;递归排序每个子数组。 …

[Linux]学习笔记系列 -- mm/page_alloc

文章目录mm/page_alloc.c 伙伴系统内存分配器(Buddy System Memory Allocator) 内核物理内存管理的核心历史与背景这项技术是为了解决什么特定问题而诞生的&#xff1f;它的发展经历了哪些重要的里程碑或版本迭代&#xff1f;目前该技术的社区活跃度和主流应用情况如何&#xf…