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

全方面熟悉Maven项目管理工具(三)认识mvn的各类构建命令并创建、打包Web工程

1. POM(核心概念)

1.1 含义

POM: Project Object Model,项目对象模型。

DOM: Document Object Model,文档对象模型,和 POM 类似

它们都是模型化思想的具体体现

1.2 模型化思想

POM 表示将工程抽象为一个模型,再用程序中的对象来描述这个模型。这样我们就可以用程序来管理项目了。

在开发过程中,最基本的做法就是将显示生活中的事物抽象成模型,如何封装模型相关的数据作为一个对象,这样就可以在程序中计算与显示事物相关的数据

1.3 对应的配置文件

POM 理念集中体现在 Maven 工程根目录下 pom.xml 配置文件中。

所以 pom.xml 配置文件就是 Maven 工程的核心配置文件。

其实学习 Maven 就是学习这个文件怎么配置,各个配置有什么用

2. 约定的目录结构(核心概念)

2.1 各个目录的作用

在这里插入图片描述

另外还有一个 target 目录专门存放构建操作输出的结果

2.2 约定目录结构的意义

Maven 为了让构建过程能够尽可能的自动化完成,所以必须约定目录结构的作用。

例如:Maven 执行编译操作,必须先去 Java 源程序目录读取 Java 源代码,然后执行编译,最后把编译结果存放在 target 目录

2.3 约定大于配置

Maven 对于目录结构这个问题,没有采用配置的方式,而是基于约定。这样会让我们在开发过程中非常方便。如果每次创建 Maven 工程后,还需要针对各个目录的位置进行详细的配置,那肯定非常麻烦

目前开发领域的技术发展趋势就是:约定大于配置,配置大于编码

手敲代码 (码农) --> 配置事务 (管理层) --> 指定规则 (指导者)

3. 在 Maven 工程中编写代码

3.1主题程序

在这里插入图片描述

主体程序指的是被测试的程序,同时也是将来在项目中真正要使用的程序

package com.renexdemo.mavendemo;public class Calculator {public static int sumOut(int num1,int num2){return num1 + num2;}}

3.2 测试程序

在这里插入图片描述

package com.renexdemo.mavendemo;import org.junit.Test;
/* import static 引入静态方法 或者 类 */
import static com.renexdemo.mavendemo.Calculator.sumOut;
import static org.junit.Assert.*;public class CalculatorTest {@Testpublic void testOutSum(){int i = sumOut(10, 20);/*使用 junit 的断言来判断实际结果和期待结果是否一致如果一致:测试通过,不会抛出异常如果不一致:抛出异常,测试失败*/assertEquals(30,i);}
}

4. 执行 Maven 的构建命令

4.1 要求

运行 Maven 中和构建操作相关的命令时,必须进入到 pom.xml 所在的目录。如果没有在 pom.xml 所在的目录运行 Maven 的构建命令,那么会看到下面的错误信息:

The goal you specified requires a project to execute but there is no POM in this directory

mvn -v 命令与构建操作无关,只要正确配置了 PATH,在任何目录下执行都可以。而构建相关的命令要在 pom.xml 所在目录下运行 —— 操作哪个工程,就进入这个工程的 pom.xml 目录

4.2 清理操作

命令: mvn clean

效果: 删除 target 目录

4.3 编译操作

主程序编译: mvn compile

测试程序编译: mvn test-compile

主体程序编译结果存放的目录: target/classes

测试程序编译结果存放的目录: target/test-classes

4.4 测试操作

命令: mvn test

测试的报告存放的目录: target/surefire-reports

4.5 打包操作

命令: mvn package

打包的结果:jar/war 包

存放的目录: target

4.6 安装操作

命令: mvn install

[INFO] Installing F:\Java\学习案例\MavenCommand\pro01-maven-java\target\pro01-maven-java-1.0-SNAPSHOT.jar to D:\JavaStorage\maven-repo\com\renexdemo\mavendemo\pro01-maven-java\1.0-SNAPSHOT\pro01-maven-java-1.0-SNAPSHOT.jar[INFO] Installing F:\Java\学习案例\MavenCommand\pro01-maven-java\pom.xml to D:\JavaStorage\maven-repo\com\renexdemo\mavendemo\pro01-maven-java\1.0-SNAPSHOT\pro01-maven-java-1.0-SNAPSHOT.pom

安装的效果是将本地构建过程中生成的 jar 包存入 Maven 本地仓库。这个 jar 包在 Maven 仓库中的路径是根据它的坐标生成的。

坐标信息如下:

<groupId>com.renexdemo.mavendemo</groupId>
<artifactId>pro01-maven-java</artifactId>
<version>1.0-SNAPSHOT</version>

在 Maven 仓库中生成的路径如下:

D:\JavaStorage\maven-repo\com\renexdemo\mavendemo\pro01-maven-java\1.0-SNAPSHOT

另外,安装操作还会将 pom.xml 文件转换成 XXX.pom 文件一起存入本地仓库。

所以我们在 Maven 的本地仓库中想看一个 jar 包原始的 pom.xml 文件时,查看对应的 XXX.pom 文件即可(名字发送改变,本质上是同一个文件)。

5. 创建 Maven 版的 Web 工程

5.1 说明

使用 mvn archetype:generate 命令生成 Web 工程时,需要使用一个专门的 archetype。这个专门生成 Web 工程骨架的 archetype 可以参照官网看到它的用法:

在这里插入图片描述

5.1.1 Usage

参考 archetypeGroupId、archetypeArifacId、archetypeVersion 用来指定现在使用的 maven-archetype-webapp 的坐标

5.2 操作

注意:如果在上一个工程的目录下执行 mvn archetype:generate 命令,那么 Maven 会报错:不能在一个非 pom 的工程下再创建其他工程。所以不要再创建好的工程中再创建新的工程,请回到工作空间根目录来操作。

mvn archetype:generate
<!--再选择模板时,选择Webapp-->

5.3 生成的 Web 工程的目录结构

在这里插入图片描述

webapp 目录下有index.jsp

WEB-INF 目录下有 web.xml

5.4 创建 Servlet

正常创建即可,但没有 jar 包(Servlet-api)。

我们创建好 Web 工程后,需要导入 jar 包。

在这里插入图片描述

5.5 配置对 servlet-api.jar 包的依赖

对于不知道详情的依赖可以到https://mvnrepository.com/网站查询。使用关键词搜索,然后在搜索结果列表中选择合适的jar包使用。

在这里插入图片描述

6. 将 Web 工程打包为 war 包

运行 mvn package 命令,生成 war 包的位置如下:
在这里插入图片描述

6.1 生成 Web 工程

在 tomcat 目录中,放入编译好的 war包/解压的war包文件夹,在命令行中调用 tomcat 的startup.bat,让 tomcat 将编译网站跑起来。

tomcat 跑起来后,就可以访问 http://localhost:8080/项目名/

7. 😊前篇快递

  • 认识Maven、Maven如何安装?
  • 坐标、pom.xml文件的解读!

8. 👉好文相推

  • 2-3树思想与红黑树的实现与基本原理
  • ElasticSearch8.7 搭配 SpringDataElasticSearch5.1 的使用
  • B树和B+树的实现原理阐述

相关文章:

全方面熟悉Maven项目管理工具(三)认识mvn的各类构建命令并创建、打包Web工程

1. POM&#xff08;核心概念&#xff09; 1.1 含义 POM&#xff1a; Project Object Model&#xff0c;项目对象模型。 DOM&#xff1a; Document Object Model&#xff0c;文档对象模型&#xff0c;和 POM 类似 它们都是模型化思想的具体体现 1.2 模型化思想 POM 表示将…...

MySQL中查询语句的执行流程

文章目录 前言流程图概述最后 前言 你好&#xff0c;我是醉墨居士&#xff0c;今天我们一起探讨一下执行一条查询的SQL语句在MySQL内部都发生了什么&#xff0c;让你对MySQL内部的架构具备一个宏观上的了解 流程图 概述 对于查询语句的SQL的执行流程&#xff0c;主要可以分为…...

【代码随想录Day47】单调栈Part02

42. 接雨水 题目链接/文章讲解&#xff1a;代码随想录 视频讲解&#xff1a;单调栈&#xff0c;经典来袭&#xff01;LeetCode:42.接雨水_哔哩哔哩_bilibili 思路概述 问题理解&#xff1a;我们需要计算在给定柱子高度之间可以接住的雨水总量。雨水的量取决于柱子的高度和它们…...

Java全栈经典面试题剖析3】JavaSE面向对象2

目录 面试题2.12 Overload和Override的区别 面试题2.13 Overload方法是否可以改变返回值的类型&#xff1f; 面试题2.14 为什么方法不能根据返回类型来区分重载&#xff1f; 面试题2.15 构造器可不可以被重载或重写&#xff1f; 面试题2.16 在 Java 中定义⼀个不做事且没有…...

@JsonIgnoreProperties做接口对接时使用带来的好处

最近看到有个同事&#xff0c;在代码里面加了JsonIgnoreProperties这个注解&#xff0c;以前还真没有经常去用过&#xff0c;接口对接尤其是跟金蝶、用友等第三方&#xff0c;这个注解在接收数据是非常好用的&#xff1b;接下来带大家一起了解下具体的特性和使用方式 JsonIgno…...

SpringBoot整合mybatisPlus实现批量插入并获取ID

背景&#xff1a;需要实现批量插入并且得到插入后的ID。 使用for循环进行insert这里就不说了&#xff0c;在海量数据下其性能是最慢的。数据量小的情况下&#xff0c;没什么区别。 【1】saveBatch(一万条数据总耗时&#xff1a;2478ms) mybatisplus扩展包提供的&#xff1a;…...

实战RAG第一天——llama_index向量索引,查询引擎,搜索知识库问答,全部代码,保姆级教学

一、llama_index简介 llama_index(以前称为 GPT Index)是一个用于构建、查询、索引大型文档和数据集的开源框架。它的核心功能是帮助开发者将大语言模型(LLM)与自己的数据集无缝集成,从而进行知识库的构建、查询等任务。llama_index 使用 Python 编写,并结合了多种大语言…...

大数据治理

大数据治理是指对大数据的管理和控制,以确保数据的质量、可用性、安全性和合规性。随着大数据技术的不断发展,企业和组织面临着越来越多的数据管理挑战,如数据质量问题、数据安全问题、数据合规问题等。大数据治理成为了企业和组织应对这些挑战的重要手段。 一、大数据治理…...

云计算作业

关闭防火墙 停用Linux 挂载 下载nginx程序 启动nginx程序 连接网卡配置文件并且修改 更改模式为静态手动&#xff0c;并且分别修改ip地址&#xff0c;网关地址&#xff0c;dns 激活 创建自定义文件 定义server模块 监听地址 设置目录 匹配 激活网址根目录 创建目录文…...

复制文件到U盘提示:对于目标文件系统,文件过大

查看U盘属性的文件系统是否为FAT32&#xff0c;需将其改为NTFS 方法一 Win R 输入cmd打开命令行&#xff0c;输入以下命令&#xff08;注&#xff1a;f为U盘盘符&#xff09; convert f: /fs:ntfs /x方法二 格式化U盘&#xff0c;右键点击U盘进行格式化&#xff0c;文件系…...

SpringBoot+Swagger2.7.0实现汉化(2.8.0不行)

场景 SpringBootSwagger2实现可视化API文档流程&#xff1a; SpringBootSwagger2实现可视化API文档流程_swagger 可视化端口-CSDN博客 上面SpringBoot中使用swagger的效果 上面使用的是swagger2.8.0,且在线API是英文的。现在要将其进行汉化。 汉化效果 实现 首先打开sprin…...

c++ 散列表

散列表&#xff08;Hash Table&#xff09;是一种高效的数据结构&#xff0c;广泛用于实现快速的键值对存储。 基本概念 散列表使用哈希函数将键映射到数组的索引。其主要优点在于平均情况下提供常数时间复杂度的查找、插入和删除操作。 哈希函数: 将键映射到一个固定大小的…...

Windows通过netsh控制安全中心防火墙和网络保护策略

Windows通过netsh控制安全中心防火墙和网络保护策略 1. 工具简介 【1】. Windows安全中心 【2】. netsh工具 netsh(Network Shell) 是一个Windows系统本身提供的功能强大的网络配置命令行工具。 2. 开启/关闭防火墙策略 在设置端口&#xff08;禁用/启用&#xff09;前&am…...

UML(Unified Modeling Language,统一建模语言)

UML&#xff08;Unified Modeling Language&#xff0c;统一建模语言&#xff09;是一种标准化的图形化语言&#xff0c;用于软件工程中的可视化建模。UML由Grady Booch、James Rumbaugh和Ivar Jacobson共同开发&#xff0c;他们各自的工作&#xff08;Booch方法、OMT方法和OOS…...

深⼊理解指针(2)

目录 1. 数组名的理解 2. 使⽤指针访问数组 3. ⼀维数组传参的本质 4. ⼆级指针 5. 指针数组 6. 指针数组模拟⼆维数组 1. 数组名的理解 我们在使⽤指针访问数组的内容时&#xff0c;有这样的代码&#xff1a; int arr[10] {1,2,3,4,5,6,7,8,9,10}; int *p &arr[…...

Ubuntu中MySQL远程登录设置

mysql单独放在一台Ubuntu服务器上&#xff0c;我远程连接不上。可能是安装的时候忘记设置远程登录了。事后补救措施如下&#xff1a; MySQL 绑定地址配置问题 MySQL 可能只绑定了 localhost&#xff0c;无法接受来自外部主机的连接。你需要检查 MySQL 的配置文件 /etc/mysql/…...

typescript 中封装一个 class 来解析接口响应数据

在TypeScript中&#xff0c;封装一个类来解析接口响应数据是一个常见的做法&#xff0c;它允许你将与接口响应相关的逻辑封装在一个可复用的单元中。下面是一个示例&#xff0c;展示了如何定义一个TypeScript类来解析一个假设的API接口响应数据。 首先&#xff0c;我们定义一个…...

[LeetCode] 21. 合并两个有序链表

题目描述&#xff1a; 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff1a; 输入&#xff1a;l1 [], l2 […...

CTFHUB技能树之SQL——MySQL结构

开启靶场&#xff0c;打开链接&#xff1a; 先判断一下是哪种类型的SQL注入&#xff1a; 1 and 11# 正常回显 1 and 12# 回显错误&#xff0c;说明是整数型注入 判断一下字段数&#xff1a; 1 order by 2# 正常回显 1 order by 3# 回显错误&#xff0c;说明字段数是2列 知道…...

Git小知识:合理的分支命名约定

前言&#xff1a;创建新分支时&#xff0c;对 Git 分支进行合理的命名非常重要&#xff0c;应选择有描述性的名称&#xff0c;因为它可以帮助团队成员更好地理解分支的目的和内容&#xff0c;以便将来回顾时能立即明白分支的目的。以下是一些常见的分支命名约定&#xff1a; 功…...

Ubuntu如何显示pcl版本

终端输入&#xff1a; apt-cache show libpcl-dev可以看到&#xff0c;Ubuntu20.04&#xff0c;下载的pcl&#xff0c;应该都是1.10版本的...

wordcloud 字体报错

wordcloud 字体报错 词云库报错&#xff1a;Only supported for TrueType fonts字体文件问题pillow版本的问题wordcloud版本问题&#xff08;我的最终解决方案&#xff09; 词云库报错&#xff1a;Only supported for TrueType fonts 字体文件问题 解决方法 写绝对路径 &…...

使用Matplotlib绘制极轴散点图

散点图对于理解数据可视化中变量之间的相互作用至关重要。虽然散点图经常在笛卡尔坐标中创建&#xff0c;但我们也可以使用Matplotlib在极轴上创建散点图。有了这个功能&#xff0c;人们可以以创新的方式查看圆形或角形数据&#xff0c;例如周期性趋势或定向模式。在本文中&…...

Elasticsearch入门:增删改查详解与实用场景

引言 在我之前做社交架构设计的时候&#xff0c;我们有一项关键且必要的需求&#xff1a;需要存储并记录用户的所有聊天记录。这些记录不仅用于业务需求&#xff0c;也承担了风控审查的职责。因此&#xff0c;在架构设计中&#xff0c;我们需要考虑每天海量的聊天消息量&#…...

【AI论文精读6】SELF-RAG(23.10)附录

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】 P1&#xff0c;P2&#xff0c;P3 附录 A SELF-RAG 细节 A.1 反思标记&#xff08;reflection tokens&#xff09; 反思标记的定义 下面我们提供了反思标记类型和输出标记的详细定义。前三个方面将在每个片段&#xf…...

sql-labs靶场第十七关测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、寻找注入点 2、注入数据库 ①寻找注入方法 ②爆库&#xff0c;查看数据库名称 ③爆表&#xff0c;查看security库的所有表 ④爆列&#xff0c;查看users表的所有列 ⑤成功获取用户名…...

面试官:MySQL一次到底插入多少条数据合适啊?

前言 大家好&#xff01;在互联网时代&#xff0c;我们的每一个动作&#xff0c;无论是浏览网页、分享动态、点赞、购物或者搜索信息&#xff0c;都会在背后产生数据。这些数据&#xff0c;根据其用途和重要性&#xff0c;可能会被储存到不同的地方&#xff0c;其中最常见的存…...

WSL2 构建Ubuntu系统-轻量级AI运行环境

环境&#xff1a;Win11 软件&#xff1a;WSL2 安装环境&#xff1a;Ubuntu 22.04 检查电脑是否开启虚拟化 打开&#xff1a;任务管理器->性能->CPU CPU 开启虚拟化&#xff08;通常默认是开启的&#xff0c;如果没有开启需要BIOS开启&#xff09; 虚拟化设置&#xff0…...

什么是凸二次规划问题

我们从凸二次规划的基本概念出发&#xff0c;然后解释它与支持向量机的关系。 一、凸二次规划问题的详细介绍 凸二次规划问题是优化问题的一类&#xff0c;目标是最小化一个凸的二次函数&#xff0c;受一组线性约束的限制。凸二次规划是一类特殊的二次规划问题&#xff0c;其…...

解决 Elasticsearch cluster_block_exception 错误的终极指南

Elasticsearch 是一个功能强大的分布式搜索引擎&#xff0c;广泛应用于全文检索、实时分析等场景。 尽管如此&#xff0c;像任何复杂系统一样&#xff0c;它也会遇到一些运行问题&#xff0c;其中较为常见且影响较大的就是 cluster_block_exception 错误。 本文将深入解析这种错…...