Java——Maven项目管理

news2024/12/24 9:30:55

目录

    • Maven
    • 1,Maven
      • 1.1 Maven简介
        • 1.1.1 Maven模型
        • 1.1.2 仓库
      • 1.3 Maven基本使用
        • 1.3.1 Maven 常用命令
        • 1.3.2 Maven 生命周期
        • 1.4.2 Maven 坐标详解
        • 1.4.3 IDEA 创建 Maven项目
        • 1.4.4 IDEA 导入 Maven项目
      • 1.5 依赖管理
        • 1.5.1 使用坐标引入jar包
        • 1.5.2 依赖范围

Maven

目标

  • 能够使用Maven进行项目的管理

1,Maven

Maven是专门用于管理和构建Java项目的工具,它的主要功能有:

  • 提供了一套标准化的项目结构

  • 提供了一套标准化的构建流程(编译,测试,打包,发布……)

  • 提供了一套依赖管理机制

标准化的项目结构:

项目结构我们都知道,每一个开发工具(IDE)都有自己不同的项目结构,它们互相之间不通用。我再eclipse中创建的目录,无法在idea中进行使用,这就造成了很大的不方便

而Maven提供了一套标准化的项目结构,所有的IDE使用Maven构建的项目完全一样,所以IDE创建的Maven项目可以通用。

标准化的构建流程:

如上图所示我们开发了一套系统,代码需要进行编译、测试、打包、发布,这些操作如果需要反复进行就显得特别麻烦,而Maven提供了一套简单的命令来完成项目构建。

依赖管理:

依赖管理其实就是管理你项目所依赖的第三方资源(jar包、插件)。如之前我们项目中需要使用JDBC和Druid的话,就需要去网上下载对应的依赖包(当前之前是老师已经下载好提供给大家了),复制到项目中,还要将jar包加入工作环境这一系列的操作

而Maven使用标准的 坐标 配置来管理各种依赖,只需要简单的配置就可以完成依赖管理。

如上图右边所示就是mysql驱动包的坐标,在项目中只需要写这段配置,其他都不需要我们担心,Maven都帮我们进行操作了。

1.1 Maven简介

Apache Maven 是一个项目管理和构建工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建、报告和文档。

官网 :http://maven.apache.org/

通过上面的描述大家只需要知道Maven是一个工具即可。Apache 是一个开源组织,将来我们会学习很多Apache提供的项目。

1.1.1 Maven模型

  • 项目对象模型 (Project Object Model)
  • 依赖管理模型(Dependency)
  • 插件(Plugin)
image-20210726155759621

如上图所示就是Maven的模型,而我们先看紫色框框起来的部分,他就是用来完成 标准化构建流程 。如我们需要编译,Maven提供了一个编译插件供我们使用,我们需要打包,Maven就提供了一个打包插件提供我们使用等。

image-20210726160928515

上图中紫色框起来的部分,项目对象模型就是将我们自己抽象成一个对象模型,有自己专属的坐标,如下图所示是一个Maven项目:

image-20210726161340796

依赖管理模型则是使用坐标来描述当前项目依赖哪儿些第三方jar包,如下图所示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9khHPYnY-1675060527488)(assets/image-20210726161616034.png)]

上述Maven模型图中还有一部分是仓库。如何理解仓库呢?

1.1.2 仓库

大家想想这样的场景,我们创建Maven项目,在项目中使用坐标来指定项目的依赖,那么依赖的jar包到底存储在什么地方呢?其实依赖jar包是存储在我们的本地仓库中。而项目运行时从本地仓库中拿需要的依赖jar包。

仓库分类:

  • 本地仓库:自己计算机上的一个目录

  • 中央仓库:由Maven团队维护的全球唯一的仓库

    • 地址: https://repo1.maven.org/maven2/
  • 远程仓库(私服):一般由公司团队搭建的私有仓库

    今天我们只学习远程仓库的使用,并不会搭建。

当项目中使用坐标引入对应依赖jar包后,首先会查找本地仓库中是否有对应的jar包:

  • 如果有,则在项目直接引用;

  • 如果没有,则去中央仓库中下载对应的jar包到本地仓库。

如果还可以搭建远程仓库,将来jar包的查找顺序则变为:

本地仓库 --> 远程仓库–> 中央仓库

1.3 Maven基本使用

1.3.1 Maven 常用命令

  • compile :编译

  • clean:清理

  • test:测试

  • package:打包

  • install:安装

命令演示:

资料\代码\maven-project 提供了一个使用Maven构建的项目,项目结构如下:

而我们使用上面命令需要在磁盘上进入到项目的 pom.xml 目录下,打开命令提示符

编译命令演示:

compile :编译

执行上述命令可以看到:

  • 从阿里云下载编译需要的插件的jar包,在本地仓库也能看到下载好的插件
  • 在项目下会生成一个 target 目录

同时在项目下会出现一个 target 目录,编译后的字节码文件就放在该目录下

清理命令演示:

mvn clean

执行上述命令可以看到

  • 从阿里云下载清理需要的插件jar包
  • 删除项目下的 target 目录

打包命令演示:

mvn package

执行上述命令可以看到:

  • 从阿里云下载打包需要的插件jar包
  • 在项目的 terget 目录下有一个jar包(将当前项目打成的jar包)

测试命令演示:

mvn test  

该命令会执行所有的测试代码。执行上述命令效果如下

安装命令演示:

mvn install

该命令会将当前项目打成jar包,并安装到本地仓库。执行完上述命令后到本地仓库查看结果如下:

1.3.2 Maven 生命周期

Maven 构建项目生命周期描述的是一次构建过程经历经历了多少个事件

Maven 对项目构建的生命周期划分为3套:

  • clean :清理工作。
  • default :核心工作,例如编译,测试,打包,安装等。
  • site : 产生报告,发布站点等。这套声明周期一般不会使用。

同一套生命周期内,执行后边的命令,前面的所有命令会自动执行。例如默认(default)生命周期如下:

当我们执行 install(安装)命令时,它会先执行 compile命令,再执行 test 命令,再执行 package 命令,最后执行 install 命令。

当我们执行 package (打包)命令时,它会先执行 compile 命令,再执行 test 命令,最后执行 package 命令。

默认的生命周期也有对应的很多命令,其他的一般都不会使用,我们只关注常用的:

1.4.2 Maven 坐标详解

什么是坐标?

  • Maven 中的坐标是资源的唯一标识
  • 使用坐标来定义项目或引入项目中需要的依赖

Maven 坐标主要组成

  • groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如:com.itheima)
  • artifactId:定义当前Maven项目名称(通常是模块名称,例如 order-service、goods-service)
  • version:定义当前项目版本号

如下图就是使用坐标表示一个项目:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9RpB2JBj-1675060527489)(assets/image-20210726174718176.png)]

注意:

  • 上面所说的资源可以是插件、依赖、当前项目。
  • 我们的项目如果被其他的项目依赖时,也是需要坐标来引入的。

1.4.3 IDEA 创建 Maven项目

  • 创建模块,选择Maven,点击Next

  • 填写模块名称,坐标信息,点击finish,创建完成

    创建好的项目目录结构如下:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hn30fUvj-1675060527489)(assets/image-20210726175244826.png)]

  • 编写 HelloWorld,并运行

1.4.4 IDEA 导入 Maven项目

大家在学习时可能需要看老师的代码,当然也就需要将老师的代码导入到自己的IDEA中。我们可以通过以下步骤进行项目的导入:

  • 选择右侧Maven面板,点击 + 号

  • 选中对应项目的pom.xml文件,双击即可

  • 如果没有Maven面板,选择

    View --> Appearance --> Tool Window Bars

可以通过下图所示进行命令的操作:

配置 Maven-Helper 插件

  • 选择 IDEA中 File --> Settings

  • 选择 Plugins

  • 搜索 Maven,选择第一个 Maven Helper,点击Install安装,弹出面板中点击Accept

  • 重启 IDEA

安装完该插件后可以通过 选中项目右键进行相关命令操作,如下图所示:

1.5 依赖管理

1.5.1 使用坐标引入jar包

使用坐标引入jar包的步骤:

  • 在项目的 pom.xml 中编写 标签

  • 在 标签中 使用 引入坐标

  • 定义坐标的 groupId,artifactId,version

  • 点击刷新按钮,使坐标生效

注意:

  • 具体的坐标我们可以到如下网站进行搜索
  • https://mvnrepository.com/

快捷方式导入jar包的坐标:

每次需要引入jar包,都去对应的网站进行搜索是比较麻烦的,接下来给大家介绍一种快捷引入坐标的方式

  • 在 pom.xml 中 按 alt + insert,选择 Dependency

  • 在弹出的面板中搜索对应坐标,然后双击选中对应坐标

  • 点击刷新按钮,使坐标生效

自动导入设置:

上面每次操作都需要点击刷新按钮,让引入的坐标生效。当然我们也可以通过设置让其自动完成

  • 选择 IDEA中 File --> Settings

  • 在弹出的面板中找到 Build Tools

  • 选择 Any changes,点击 ok 即可生效

1.5.2 依赖范围

通过设置坐标的依赖范围(scope),可以设置 对应jar包的作用范围:编译环境、测试环境、运行环境。

如下图所示给 junit 依赖通过 scope 标签指定依赖的作用范围。 那么这个依赖就只能作用在测试环境,其他环境下不能使用。

那么 scope 都可以有哪些取值呢?

依赖范围编译classpath测试classpath运行classpath例子
compileYYYlogback
test-Y-Junit
providedYY-servlet-api
runtime-YYjdbc驱动
systemYY-存储在本地的jar包
  • compile :作用于编译环境、测试环境、运行环境。
  • test : 作用于测试环境。典型的就是Junit坐标,以后使用Junit时,都会将scope指定为该值
  • provided :作用于编译环境、测试环境。我们后面会学习 servlet-api ,在使用它时,必须将 scope 设置为该值,不然运行时就会报错
  • runtime : 作用于测试环境、运行环境。jdbc驱动一般将 scope 设置为该值,当然不设置也没有任何问题

注意:

  • 如果引入坐标不指定 scope 标签时,默认就是 compile 值。以后大部分jar包都是使用默认值。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

服务器与客户端的一般套路

WinSocket 套接字 ————服务器与客户端的一般套路 一、开发环境 IDE: Red Panda Dev-C 6.5编程语言:C语言库:winsock2.h 二、套接字工作流程图 注意:这个工作流程图非常重要,后面的代码编写基本就是这个逻辑 三、服务器各…

前端基于DOM或者Canvas实现页面水印

🐱 个人主页:不叫猫先生 🙋‍♂️ 作者简介:前端领域新星创作者、阿里云专家博主,专注于前端各领域技术,共同学习共同进步,一起加油呀! 💫系列专栏:vue3从入门…

AtCoder Beginner Contest 287(A~E)

比赛名称:UNIQUE VISION Programming Contest 2023 New Year (AtCoder Beginner Contest 287) 比赛链接:AtCoder Beginner Contest 287 目录 A - Majority B - Postal Card C - Path Graph? D - Match or Not E - Karuta A - Majority 问字…

工作和学习中都能用到的5款实用软件

如今,工作和学习都离不开电脑,所以电脑里的软件自然也是必不可少的,但是电脑软件那么多,不可能每个都装上吧,所以我们要装好用的、实用的,下面给大家分享5款好用到爆的软件,很多懂电脑的人都在用…

【算法】雪花算法

一.特点 1.全局唯一性:对于大数据量的分库分表场景,例如水平分表需要保证主键id的全局唯一性。 2.趋势递增:整体的id趋势是递增的,不是单调递增。 3.不规则性:id不连续,无规则,不规则。 4.包含…

乾元通多卡聚合通信设备保障生态环境监测网络

针对目前城市大气环境监测网格化建设,推出的新一代城市网格化大气环境监测系统,可以实现城市区域环境多维一体化监测管理,该设备主要用于监测大气环境中的PM10、TSP、PM2.5等颗粒物浓度,还可以实现环境监控,测噪音、大…

Node.JS 安装配置 | 安装排错解析

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Node.js下载 Node.js官方下载地址 官方下载如果慢,请用如下地址下载: Node.js 中文网 根据自己计算机配置下载 Next Next 安装地址可更换 Next…

年后找工作必看的自动化测试面试宝典,一般人我不告诉他

目录 前言 1.1 什么是 API? 1.2 什么是 API 测试? 1.3 常见的 API 测试类型有哪些? 1.4 列举 API 测试中使用的一些常用协议? 1.9API 常见测试有哪些? 1.10API 测试有哪些优势? 1.11API 测试中究竟…

【PHP 随记】—— Composer 安装项目以及项目的扩展

👉总目录👈\large\colorbox{skyblue}{👉总目录👈}👉总目录👈​ 文章目录1、Composer 安装项目① 项目安装示例② 相关问题解决③ 框架搜索指南2、Composer 安装项目的扩展使用 Composer 更轻松方便地安装 P…

RV1126笔记二十五:区域入侵检测

若该文为原创文章,转载请注明原文出处。 一、 前言 区域入侵检测是通过识别目标之后获取目标坐标位置,判断目标是否在所标定的区域内出现,常常被用在电子围栏,不安全区域入侵检测,智慧城市,安防监控等领域。具体使用场景有,在标定的区域内不能抽烟,进入工地区域必须佩…

Java快速上手Properties集合类

概念 Java中的Properties文件是一种配置文件,主要用于表达配置信息,格式是文本文件。该类主要用于读取Java的配置文件,也可以对properties文件进行修改 属性配置:以“键值”的方式书写一个属性的配置信息 注 释:在pro…

我建议大学生看一下阿凡达2,对离校后很有帮助

网上评价阿凡达2说剧情拉胯,但我却通过他的剧情看到了当代大学生的一些影子,尤其是对于离校的毕业生来说,相对吻合的场景还是很多的,让我来分析一下。 目录 阿发达2关键剧情点 1、在校期间 2、终于要离校了 3、离开学校&…

Flutter 安装踩坑记录 HTTP host https://pub.dev/ is not reachable.

Flutter安装踩坑记录安装Flutter SDK参考链接安装Flutter SDK Windows安装 flutter官网下载flutter sdk包 2.解压到C盘除去program file相关的目录(最好自己创建一个新的目录,因为放在program file等目录需要特殊的权限,会出现问题&#xf…

【解读】CSA CISO研究报告: 零信任的部署现状及未来展望

零信任理念已经存在了十多年。然而对需要保护IT系统的企业来说,这个术语及其实施方式的关注度显著增加。 国际云安全联盟CSA发布调研报告《CISO研究报告:零信任的部署现状及未来展望》,本次调研的目的是使大家更好地理解组织机构内部的零信任…

【My Electronic Notes系列——放大电路与集成运算放大器】

目录 序言: 🏆🏆人生在世,成功并非易事,他需要破茧而出的决心,他需要永不放弃的信念,他需要水滴石穿的坚持,他需要自强不息的勇气,他需要无畏无惧的凛然。要想成功&…

电脑怎么录制视频?如何录制页面上指定区域

你知道电脑怎么录制视频吗?有时候我们并不需要录制整个电脑屏幕,只需要对特定区域,这个时候该怎么办呢?其实我们只需要一款既支持全屏录制又支持区域录制的录屏工具,就可以轻松搞定。下面小编教您如何录制电脑上指定的…

azg携手Bubs出席2022未来母婴大会主题专场,探讨母婴品牌长红发展路径

近日,由母婴行业观察主办的“2022第八届未来母婴大会”在上海成功举办,来自行业内的近百位资深嘉宾受邀参与,共襄盛会。而在以“新周期 新机遇,母婴品牌可持续生长路径”的2022未来母婴大会主题专场中,Bubs中国区资深渠…

梦熊杯-十二月月赛-白银组题解-D.智慧

D. Problem D.智慧(wisdom.cpp) 内存限制:256 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 题目描述: 「须弥」是「智慧」的国度。 布耶尔认为,如果能只使用加…

CTFshow--web--红包题第七弹

好家伙,一打开就是个phpinfo,看看了感觉暂时没有什么利用的东西,扫一下目录吧使用dirsearch扫描,发现/.git/index的一个目录文件,访问下载他python dirsearch.py -u "http://98c1d213-ce9d-4415-99b1-2b4f2c80430…

java 探花交友项目day5 推荐好友列表 MongoDB集群 发布动态,查询动态 圈子功能

推荐好友列表 需求分析 推荐好友:分页形式查询推荐的用户列表,根据评分排序显示 代码实现: tanhuaController: /** * 查询分页推荐好友列表 */ GetMapping("/recommendation") public ResponseEntity recommendation(Recomme…