Maven(四):Maven的使用——java工程与Web工程

news2025/1/18 14:58:13

Maven(四):Maven的使用(中)

  • 前言
  • 一、实验四:创建 Maven 版的 Web 工程
    • 1、说明
    • 2、操作
    • 3、生成的pom.xml
    • 4、生成的Web工程的目录结构
    • 5、创建 Servlet
      • 5.1 在 main 目录下创建 java 目录
      • 5.2 在 java 目录下创建 Servlet 类所在的包的目录
      • 5.3 在包下创建 Servlet 类
      • 5.4 在 web.xml 中注册 Servlet
    • 6、在 index.jsp 页面编写超链接
    • 7、编译
    • 8、配置对 servlet-api.jar 包的依赖
    • 9、将 Web 工程打包为 war 包
    • 10、将 war 包部署到 Tomcat 上运行
  • 二、实验五:让 Web 工程依赖 Java 工程
    • 1、观念
    • 2、操作
    • 3、在 Web 工程中,编写测试代码
      • 3.1 补充创建目录
      • 3.2 确认 Web 工程依赖了 junit
      • 3.3 创建测试类
    • 4、执行Maven命令
      • 4.1 测试命令
      • 4.2 打包命令
      • 4.3 查看当前 Web 工程所依赖的 jar 包的列表
      • 4.4 以树形结构查看当前 Web 工程的依赖信息

前言

本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远!



一、实验四:创建 Maven 版的 Web 工程

1、说明

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

在这里插入图片描述

参数 archetypeGroupIdarchetypeArtifactIdarchetypeVersion 用来指定现在使用的 maven-archetype-webapp 的坐标。

2、操作

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

然后运行生成工程的命令:

mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DarchetypeVersion=1.4

下面的操作按照提示执行:

Define value for property 'groupId': com.atguigu.maven Define value for property 'artifactId': pro02-maven-web Define value for property 'version' 1.0-SNAPSHOT: :【直接回车,使用默认值】

Define value for property 'package' com.atguigu.maven: :【直接回车,使用默认值】 
Confirm properties configuration: groupId: com.atguigu.maven artifactId: pro02-maven-web version: 1.0-SNAPSHOT package: com.atguigu.maven Y: :【直接回车,表示确认】

3、生成的pom.xml

确认打包的方式是war包形式

<packaging>war</packaging>

4、生成的Web工程的目录结构

在这里插入图片描述

webapp 目录下有 index.jsp

WEB-INF 目录下有 web.xml

5、创建 Servlet

5.1 在 main 目录下创建 java 目录

在这里插入图片描述

5.2 在 java 目录下创建 Servlet 类所在的包的目录

在这里插入图片描述

5.3 在包下创建 Servlet 类

package com.atguigu.maven;
	
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import java.io.IOException;
	
public class HelloServlet extends HttpServlet{
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		response.getWriter().write("hello maven web");
		
	}
	
}

5.4 在 web.xml 中注册 Servlet

  <servlet>
	<servlet-name>helloServlet</servlet-name>
	<servlet-class>com.atguigu.maven.HelloServlet</servlet-class>
  </servlet>
  <servlet-mapping>
	<servlet-name>helloServlet</servlet-name>
	<url-pattern>/helloServlet</url-pattern>
  </servlet-mapping>

6、在 index.jsp 页面编写超链接

<html>
<body>
<h2>Hello World!</h2>
<a href="helloServlet">Access Servlet</a>
</body>
</html>

JSP全称是 Java Server Page,和 Thymeleaf 一样,是服务器端页面渲染技术。这里我们不必关心 JSP
语法细节,编写一个超链接标签即可。

7、编译

此时直接执行 mvn compile 命令出错:

程序包 javax.servlet.http 不存在

程序包 javax.servlet 不存在

找不到符号

符号: 类 HttpServlet

…… 

上面的错误信息说明:我们的 Web 工程用到了 HttpServlet 这个类,而 HttpServlet 这个类属于servlet-api.jar 这个 jar 包。此时我们说,Web 工程需要依赖 servlet-api.jar 包。

在这里插入图片描述

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

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

在这里插入图片描述

比如,我们找到的 servlet-api 的依赖信息:

<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

这样就可以把上面的信息加入 pom.xml。重新执行 mvn compile 命令。

9、将 Web 工程打包为 war 包

运行 mvn package 命令,生成 war 包的位置如下图所示:

在这里插入图片描述

10、将 war 包部署到 Tomcat 上运行

war 包复制到 Tomcat/webapps 目录下

在这里插入图片描述

启动 Tomcat

在这里插入图片描述
在这里插入图片描述

通过浏览器尝试访问:http://localhost:8080/pro02-maven-web/index.jsp

二、实验五:让 Web 工程依赖 Java 工程

1、观念

明确一个意识:从来只有 Web 工程依赖 Java 工程,没有反过来 Java 工程依赖 Web 工程。本质上来说,Web 工程依赖的Java 工程其实就是 Web 工程里导入的 jar 包。最终 Java 工程会变成 jar 包,放在 Web 工程的WEB-INF/lib 目录下。

2、操作

pro02-maven-web 工程的 pom.xml 中,找到 dependencies 标签,在 dependencies标签中做如下配置:

<!-- 配置对Java工程pro01-maven-java的依赖 -->
<!-- 具体的配置方式:在dependency标签内使用坐标实现依赖 -->
<dependency>
	<groupId>com.atguigu.maven</groupId>
	<artifactId>pro01-maven-java</artifactId>
	<version>1.0-SNAPSHOT</version>
</dependency>

3、在 Web 工程中,编写测试代码

3.1 补充创建目录

pro02-maven-web\src\test\java\com\atguigu\maven

3.2 确认 Web 工程依赖了 junit

 <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>

3.3 创建测试类

Java 工程的 CalculatorTest.java 类复制到 pro02-maven-wb\src\test\java\com\atguigu\maven 目录下

4、执行Maven命令

4.1 测试命令

mvn test

说明:测试操作中会提前自动执行编译操作,测试成功就说明编译也是成功的。

4.2 打包命令

mvn package

在这里插入图片描述

通过查看 war 包内的结构,我们看到被 Web 工程依赖的 Java 工程确实是会变成 Web 工程的 WEB-INF/lib 目录下的jar 包。

在这里插入图片描述

4.3 查看当前 Web 工程所依赖的 jar 包的列表

mvn dependency:list

[INFO] The following files have been resolved:
[INFO] org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] javax.servlet:javax.servlet-api:jar:3.1.0:provided
[INFO] com.atguigu.maven:pro01-maven-java:jar:1.0-SNAPSHOT:compile
[INFO] junit:junit:jar:4.12:test

说明:javax.servlet:javax.servlet-api:jar:3.1.0:provided 格式显示的是一个 jar包的坐标信息。格式是:
groupId:artifactId:打包方式:version:依赖的范围

这样的格式虽然和我们 XML 配置文件中坐标的格式不同,但是本质上还是坐标信息,大家需要能够认识这样的格式,将来从 Maven命令的日志或错误信息中看到这样格式的信息,就能够识别出来这是坐标。进而根据坐标到Maven仓库找到对应的jar包,用这样的方式解决我们遇到的报错的情况。

4.4 以树形结构查看当前 Web 工程的依赖信息

mvn dependency:tree

[INFO] com.atguigu.maven:pro02-maven-web:war:1.0-SNAPSHOT 
[INFO] +- junit:junit:jar:4.12:test 
[INFO] | \- org.hamcrest:hamcrest-core:jar:1.3:test 
[INFO] +- javax.servlet:javax.servlet-api:jar:3.1.0:provided 
[INFO] \- com.atguigu.maven:pro01-maven-java:jar:1.0-SNAPSHOT:compile 

我们在 pom.xml 中并没有依赖 hamcrest-core,但是它却被加入了我们依赖的列表。原因是:junit依赖了hamcrest-core,然后基于依赖的传递性,hamcrest-core 被传递到我们的工程了。

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

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

相关文章

备受瞩目的南卡OE Pro上线!稳坐国内开放式蓝牙耳机TOP1,舒适音质双在线!

4月10号&#xff0c;国内专业资深声学品牌Nank南卡&#xff0c;将推出2023年度旗舰机——南卡OE Pro不入耳开放式蓝牙耳机&#xff0c;致力打造全新不入耳、不伤耳、安全健康佩戴体验&#xff0c;无论是音质体验还是佩戴舒适度&#xff0c;都完胜同行业不入耳开放式耳机&#x…

Ubuntu系统设置中文

在工作中有时候需要&#xff0c;设置系统编码为中文编码&#xff0c;记录一下配置中文编码的流程 ubuntu所需的安装包&#xff1a;(3条消息) linux中文编码locale资源-CSDN文库 date可以查看是否设置了中文编码 date 没有设置中文编码时是这样的显示格式 将包解压了&#xf…

美颜sdk的性能测试与优化技巧

在移动应用中&#xff0c;美颜功能已成为不可或缺的一部分。美颜sdk作为实现美颜功能的关键技术之一&#xff0c;其性能测试与优化显得尤为重要。本文将介绍美颜sdk的性能测试与优化技巧&#xff0c;希望能给您解答疑惑。 一、性能测试 1、常用性能指标 美颜sdk的性能测试主…

智慧医院微信小程序定制开发功能有哪些

无论是哪个时代&#xff0c;人们对于医疗资源的需求都没有消退过&#xff0c;尤其是随着经济条件的提高&#xff0c;人们也越来越关注健康问题。无论是生病就诊还是定期体检都要用到医疗资源。但是平时到医院好像什么时候都人满为患&#xff0c;排很长时间的队&#xff0c;不仅…

数字乡村振兴智慧农业整体规划建设方案2022(ppt可编辑)

项目建设需求 1、农业遥感应用&#xff1a;土地资源分布情况、农作物种植品类分析、作物种植面积监测及区域规划、农作物长势动态监测、农作物估产、病虫害的监测及预警。2、测土配方施肥系统&#xff1a;可查询到相关土地的土壤信息&#xff0c;如&#xff1a;土壤类型、养分…

【顺序表】

顺序表和链表 顺序表1. 函数声明部分2. 函数的实现部分&#xff08;1&#xff09;初始化&#xff08;2&#xff09;尾插&#xff08;3&#xff09;头插&#xff08;4&#xff09;尾删&#xff08;5&#xff09;头删&#xff08;6&#xff09;在pos位置插入x&#xff08;7&#…

【Python实战】入门级都能学懂的Python爬虫之仅需8行代码一键免费下载音乐,听歌自由真这么简单?

前言 据说互联网上 50%以上的流量都是爬虫创造的&#xff0c;也许你看到很多热门数据都是爬虫所创造的&#xff0c; 所以可以说无爬虫就无互联网的繁荣。 所有文章完整的素材源码都在&#x1f447;&#x1f447; 粉丝白嫖源码福利&#xff0c;请移步至CSDN社区或文末公众hao即…

C语言的深度解析

C语言的深度解析 C语言概述C语言内存管理C语言标准库 C语言概述 C是一种通用的、过程式编程编程语言&#xff0c;支持结构化编程、词法作用域和递归&#xff0c;使用静态类型系统&#xff0c;并且广发用于系统软件与应用软件的开发。 C语言具有高效、灵活、功能丰富、表达力强…

EMQX vs NanoMQ | 2023 MQTT Broker 对比

引言 EMQX 和 NanoMQ 都是由全球领先的开源物联网数据基础设施软件供应商 EMQ 开发的开源 MQTT Broker。 EMQX 是一个高度可扩展的大规模分布式 MQTT Broker&#xff0c;能够将百万级的物联网设备连接到云端。NanoMQ 则是专为物联网边缘场景设计的轻量级 Broker。 本文中我们…

基于MATLAB语音信号的数字滤波

MATLAB语音信号的数字滤波 一、实验目的 掌握使用 FFT 进行信号谱分析的方法设计数字滤波器对指定的语音信号进行滤波处理 二、实验内容 导入音频信号&#xff0c;并绘制出时域波形和频域波形&#xff1a; 可以看到&#xff0c;频谱上有很多额外的噪音频率&#xff0c;在…

智加科技与舍弗勒签订商用车先进转向系统量产合作协议,将率先量产行业首个正向开发的智能重卡冗余转向

自动驾驶已经成为当前汽车行业的重要发展趋势之一。在此背景下&#xff0c;在2023上海国际汽车展期间&#xff0c;智加科技与舍弗勒集团签订量产合作协议&#xff0c;双方将在自动驾驶商用车先进转向系统领域展开合作&#xff0c;共同推动重卡自动驾驶的技术应用和创新发展。 图…

用TrackEval评测自己的数据集

TrackEval库虽然很专业&#xff0c;但是设置路径很麻烦&#xff0c;于是我自己基于TrackEval简单写了个对评测自己数据集更友好的&#xff0c;仅限2DMOT数据集&#xff0c;可以评测多类别。 项目地址&#xff08;欢迎star&#xff01;&#xff09;https://github.com/JackWoo0…

第三十天 Maven高级(分模块设计、继承、聚合、私服)

目录 Maven高级 1. 分模块设计与开发 1.1 介绍 1.2实践 1.3 总结 2. 继承与聚合 2.1 继承 2.2 聚合 2.3 继承与聚合对比 3. 私服 3.1 场景 3.2 介绍 3.3 资源上传与下载 Maven高级 Web开发讲解完毕之后&#xff0c;我们再来学习Maven高级。其实在前面的课程当中&am…

camunda如何处理流程待办任务

在 Camunda 中处理流程任务需要使用 Camunda 提供的 API 或者用户界面进行操作。以下是两种常用的处理流程任务的方式&#xff1a; 1、通过 Camunda 任务列表处理任务&#xff1a;在 Camunda 任务列表中&#xff0c;可以看到当前需要处理的任务&#xff0c;点击任务链接&#…

数据库基础篇 《2. MySQL环境搭建》

1. MySQL的卸载 步骤1&#xff1a;停止MySQL服务 在卸载之前&#xff0c;先停止 MySQL8.0 的服务。按键盘上的 “Ctrl Alt Delete” 组合键&#xff0c;打开 “ 任务管理器 ” 对话框&#xff0c;可以在“ 服务 ” 列表找到 “MySQL8.0” 的服务&#xff0c;如果现在 “ 正…

SAP 生产订单自定义订单状态

1、生产订单通常系统有一整套订单状态&#xff0c;做PP的各位同学都应该知道。 CRTD状态 REL已下达 CNF已报工 DLV已入库 TECO技术性完成 等等状态这里就不在罗列了&#xff0c;可以自行在生产订单中看到 2、这篇文章主要是在生产订单系统外&#xff0c;在自定义一套状态。这个…

Win10系统下,蓝牙开关不见了怎么办

自从更新了Win10系统后&#xff0c;不少驱动人生的用户反馈&#xff0c;Win10系统中蓝牙开关突然不见了&#xff0c;无法连接蓝牙设备。驱动人生就为大家带来Win10系统下&#xff0c;蓝牙开关不见的解决方法。 方法一&#xff1a;检查蓝牙设备驱动程序 首先&#xff0c;检查蓝…

手把手教你 YOLOv8 添加注意力机制 | 适用于【检测任务】【分类任务】【分割任务】【关键点任务】| 20+ 种全打通!

YOLOv8 添加注意力机制 ! 注意力机制介绍 注意力机制(Attention Mechanism)源于对人类视觉的研究。在认知科学中,由于信息处理的瓶颈,人类会选择性地关注所有信息的一部分,同时忽略其他可见的信息。为了合理利用有限的视觉信息处理资源,人类需要选择视觉区域中的特定部…

skyWalking自动建表-逻辑梳理

skyWalking自动建表-逻辑梳理 使用skyWalking后&#xff0c;发现我们不需要创建表&#xff0c;启动skywalking会自动创建表&#xff0c;遂研究官方源码&#xff0c;感觉oap-server设计的自动建表功能很强大&#xff0c;并进行逻辑梳理&#xff0c;仅供参考。 源码地址&#xff…

Guitar Pro8中文版如何下载?有哪些新功能

Guitar Pro是一款专业的吉他制谱软件&#xff0c;现在已更新至Guitar Pro8&#xff0c;新增了支持添加音频轨道、支持嵌套连音符、直观的效果器视图、让指法一目了然的音阶示意图等实用新功能。软件内有多种功能&#xff0c;方便用户使用乐谱&#xff0c;软件界面简洁&#xff…