javaweb-maven

前端HTML,CSS,JS,Vue,Element,Nginx最后去复习,

Java开发工程师 主要学习方向是服务端

所以进入javaweb的服务端的第一个知识点

maven

什么是maven

用于管理和构建java项目的工具

maven的官方网站

Maven – Welcome to Apache Maven

maven来干什么

依赖管理:

  • 方便快捷管理项目依赖的jar包(资源)
  • 只需要在maven项目的pom.xml文件中配置即可实现

统一项目结构:

  • 提供标准、统一的项目结构

项目构建

  • maven提供了标准的、跨平台(Linux、Windows、MacOS) 的自动化项目构建方式

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

Maven仓库

Maven仓库分为:

  • 本地仓库:自己计算机上的一个目录(用来存储jar包)

  • 中央仓库:由Maven团队维护的全球唯一的。仓库地址:Central Repository:

  • 远程仓库(私服):一般由公司团队搭建的私有仓库

下载

下载地址:Maven – Download Apache Maven

 安装

Maven安装配置步骤:

  1. 解压安装

  2. 配置仓库

  3. 配置Maven环境变量

1、解压 apache-maven-3.6.1-bin.zip(解压即安装)

解压缩后的目录结构如下:

  • bin目录 : 存放的是可执行命令。(mvn 命令重点关注)

  • conf目录 :存放Maven的配置文件。(settings.xml配置文件后期需要修改)

  • lib目录 :存放Maven依赖的jar包。(Maven也是使用java开发的,所以它也依赖其他的jar包)

2、 配置本地仓库

在自己计算机上新一个目录(本地仓库,用来存储jar包)

进入到conf目录下修改settings.xml配置文件

1). 使用超级记事本软件,打开settings.xml文件,定位到53行

2). 复制<localRepository>标签,粘贴到注释的外面(55行)

3). 复制之前新建的用来存储jar包的路径,替换掉<localRepository>标签体内容

3、配置阿里云私服

由于中央仓库在国外,所以下载jar包速度可能比较慢,而阿里公司提供了一个远程仓库,里面基本也都有开源项目的jar包。

进入到conf目录下修改settings.xml配置文件:

1). 使用超级记事本软件,打开settings.xml文件,定位到160行左右

2). 在<mirrors>标签下为其添加子标签<mirror>,内容如下:

<mirror>  <id>alimaven</id>  <name>aliyun maven</name>  <url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf>          
</mirror>

注意配置的位置,在<mirrors> ... </mirrors> 中间添加配置。

==注: 只可配置一个<mirror>(另一个要注释!) ,不然两个可能发生冲突,导致jar包无法下载!!!!!!!==

4、配置环境变量

Maven环境变量的配置类似于JDK环境变量配置一样

1). 在系统变量处新建一个变量MAVEN_HOME

  • MAVEN_HOME环境变量的值,设置为maven的解压安装目录

2). 在Path中进行配置

  • PATH环境变量的值,设置为:%MAVEN_HOME%\bin

打开cmd输入

mvn -v

 即安装成功

IDEA集成Maven

我们要想在IDEA中使用Maven进行项目构建,就需要在IDEA中集成Maven

配置Maven环境

全局设置

1、进入到IDEA欢迎页面

2、打开 All settings , 选择 Build,Execution,Deployment => Build Tools => Maven

Maven home path :指定当前Maven的安装目录

User settings file :指定当前Maven的settings.xml配置文件的存放路径

Local repository :指定Maven的本地仓库的路径 (如果指定了settings.xml, 这个目录会自动读取出来, 可以不用手动指定)

配置工程的编译版本为jdk版本(举例为11)

Maven项目

创建Maven项目

进入到IDEA欢迎页面,点击新建项目

 点击创建即可创建成功

在Maven工程下,创建测试Demo类

Maven项目的目录结构:

maven-project01

|--- src (源代码目录和测试代码目录)

        |--- main (源代码目录)

                |--- java (源代码java文件目录)

                |--- resources (源代码配置文件目录)

        |--- test (测试代码目录)

                |--- java (测试代码java目录)

                |--- resources (测试代码配置文件目录)

        |--- target (编译、打包生成文件存放目录)

POM配置详解

POM (Project Object Model) :指的是项目对象模型,用来描述当前的maven项目。

  • 使用pom.xml文件来实现

pom.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<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"><!-- POM模型版本 --><modelVersion>4.0.0</modelVersion>
​<!-- 当前项目坐标 --><groupId>com.itheima</groupId><artifactId>maven_project1</artifactId><version>1.0-SNAPSHOT</version><!-- 打包方式 --><packaging>jar</packaging></project>

pom文件详解:

  • <project> :pom文件的根标签,表示当前maven项目

  • <modelVersion> :声明项目描述遵循哪一个POM模型版本

    • 虽然模型本身的版本很少改变,但它仍然是必不可少的。目前POM模型版本是4.0.0

  • 坐标 :<groupId>、<artifactId>、<version>

    • 定位项目在本地仓库中的位置,由以上三个标签组成一个坐标

  • <packaging> :maven项目的打包方式,通常设置为jar或war(默认值:jar)

Maven坐标详解

什么是坐标?

  • Maven中的坐标是==资源的唯一标识== , 通过该坐标可以唯一定位资源位置

  • 使用坐标来定义项目或引入项目中需要的依赖

Maven坐标主要组成

  • groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如:com.itheima)

  • artifactId:定义当前Maven项目名称(通常是模块名称,例如 order-service、goods-service)

  • version:定义当前项目版本号

注意:

  • 上面所说的资源可以是插件、依赖、当前项目。

  • 我们的项目如果被其他的项目依赖时,也是需要坐标来引入的。

导入Maven项目

  • 方式1:使用Maven面板,快速导入项目

打开IDEA,选择右侧Maven面板,点击 + 号,选中对应项目的pom.xml文件,双击即可

  • 方式2:使用idea导入模块项目

依赖管理

依赖配置

依赖:指当前项目运行所需要的jar包。一个项目中可以引入多个依赖:

例如:在当前工程中,我们需要用到logback来记录日志,此时就可以在maven工程的pom.xml文件中,引入logback的依赖。具体步骤如下:

  1. 在pom.xml中编写<dependencies>标签

  2. 在<dependencies>标签中使用<dependency>引入坐标

  3. 定义坐标的 groupId、artifactId、version

<dependencies><!-- 第1个依赖 : logback --><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.11</version></dependency><!-- 第2个依赖 : junit --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency>
</dependencies>

4. 点击刷新按钮,引入最新加入的坐标

  • 刷新依赖:保证每一次引入新的依赖,或者修改现有的依赖配置,都可以加入最新的坐标

注意事项:

  1. 如果引入的依赖,在本地仓库中不存在,将会连接远程仓库 / 中央仓库,然后下载依赖(这个过程会比较耗时,耐心等待)

  2. 如果不知道依赖的坐标信息,可以到mvn的中央仓库(https://mvnrepository.com/)中搜索

搜索依赖的几种方式:

  • 利用中央仓库搜索的依赖坐标
  • 利用IDEA工具搜索依赖 Alt+Insert选择搜索依赖
  • 熟练上手maven后,快速导入依赖

依赖传递

依赖传递可以分为:

  1. 直接依赖:在当前项目中通过依赖配置建立的依赖关系

  2. 间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源 

排除依赖

问题:之前我们讲了依赖具有传递性。那么A依赖B,B依赖C,如果A不想将C依赖进来,是否可以做到?

答案:在maven项目中,我们可以通过排除依赖来实现。

 <!--排除依赖, 主动断开依赖的资源-->
    <exclusions>
        <exclusion>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </exclusion>
    </exclusions>

依赖范围

在项目中导入依赖的jar包后,默认情况下,可以在任何地方使用。

如果希望限制依赖的使用范围,可以通过<scope>标签设置其作用范围。

作用范围:

  1. 主程序范围有效(main文件夹范围内)

  2. 测试程序范围有效(test文件夹范围内)

  3. 是否参与打包运行(package指令范围内)

<scope>test</scope>

scope主程序测试程序打包(运行)范例
compile(默认)YYYlog4j
test-Y-junit
providedYY-servlet-api
runtime-YYjdbc驱动

生命周期

Maven的生命周期就是为了对所有的构建过程进行抽象和统一。

Maven从大量项目和构建工具中学习和反思,然后总结了一套高度完美的,易扩展的项目构建生命周期。这个生命周期包含了项目的清理,初始化,编译,测试,打包,集成测试,验证,部署和站点生成等几乎所有构建步骤。

  • clean:清理工作。

  • default:核心工作。如:编译、测试、打包、安装、部署等。

  • site:生成报告、发布站点等。

生命周期阶段,其实我们常用的并不多,主要关注以下几个:

• clean:移除上一次构建生成的文件

• compile:编译项目源代码

• test:使用合适的单元测试框架运行测试(junit)

• package:将编译后的文件打包,如:jar、war等

• install:安装项目到本地仓库

生命周期本身不做任何实际工作 在Maven的设计中,实际任务(如源代码编译)都交由插件来完成。

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

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

相关文章

Flink面试(1)

1.Flink 的并行度的怎么设置的&#xff1f; Flink设置并行度的几种方式 1.代码中设置setParallelism() 全局设置&#xff1a; 1 env.setParallelism(3);  算子设置&#xff08;部分设置&#xff09;&#xff1a; 1 sum(1).setParallelism(3) 2.客户端CLI设置&#xff0…

邀请全球创作者参与 The Sandbox 创作者训练营

作为首屈一指的元宇宙平台之一&#xff0c;The Sandbox 的使命是成为全球创作者的中心。随着我们对 Game Maker 的不断改进、旨在激发创作者灵感的定期 Game Jams、革命性的 "创作者挑战 "以及众多其他活动的开展&#xff0c;我们见证了大量个人加入我们充满活力的创…

opencv_5_图像像素的算术操作

方法1&#xff1a;调用库函数 void ColorInvert::mat_operator(Mat& image) { Mat dst; Mat m Mat::zeros(image.size(), image.type()); m Scalar(2, 2, 2); multiply(image, m, dst); m1 Scalar(50,50, 50); //divide(image, m, dst); //add(im…

WordPress social-warfare插件XSS和RCE漏洞【CVE-2019-9978】

WordPress social-warfare插件XSS和RCE漏洞 ~~ 漏洞编号 : CVE-2019-9978 影响版本 : WordPress social-warfare < 3.5.3 漏洞描述 : WordPress是一套使用PHP语言开发的博客平台&#xff0c;该平台支持在PHP和MySQL的服务器上架设个人博客网站。social-warfare plugin是使用…

AIGC元年大模型发展现状手册

零、AIGC大模型概览 AIGC大模型在人工智能领域取得了重大突破&#xff0c;涵盖了LLM大模型、多模态大模型、图像生成大模型以及视频生成大模型等四种类型。这些模型不仅拓宽了人工智能的应用范围&#xff0c;也提升了其处理复杂任务的能力。a.) LLM大模型通过深度学习和自然语…

MSR是个什么寄存器

MSR 这种寄存器专门用于调试、程序执行跟踪、计算机性能监控、简化软件编程、电源控制等等各种实验性功能。 什么是 MSR MSR 的概念是不易理解&#xff0c;所以这一节只说一些 MSR 的外在&#xff0c;比如形容和指令等&#xff0c;然后展开说说&#xff0c;看完整篇文章你应该…

计算机视觉 CV 八股分享 [自用](更新中......)

目录 一、深度学习中解决过拟合方法 二、深度学习中解决欠拟合方法 三、梯度消失和梯度爆炸 解决梯度消失的方法 解决梯度爆炸的方法 四、神经网络权重初始化方法 五、梯度下降法 六、BatchNorm 七、归一化方法 八、卷积 九、池化 十、激活函数 十一、预训练 十二…

【uniapp】 合成海报组件

之前公司的同事写过一个微信小程序用的 合成海报的组件 非常十分好用 最近的项目是uni的 把组件改造一下也可以用 记录一下 <template><view><canvas type"2d" class"_mycanvas" id"my-canvas" canvas-id"my-canvas" …

RT-Thread电源管理组件

电源管理组件 嵌入式系统低功耗管理的目的在于满足用户对性能需求的前提下&#xff0c;尽可能降低系统能耗以延长设备待机时间。 高性能与有限的电池能量在嵌入式系统中矛盾最为突出&#xff0c;硬件低功耗设计与软件低功耗管理的联合应用成为解决矛盾的有效手段。 现在的各种…

排序算法之桶排序

目录 一、简介二、代码实现三、应用场景 一、简介 算法平均时间复杂度最好时间复杂度最坏时间复杂度空间复杂度排序方式稳定性桶排序O(nk )O(nk)O(n^2)O(nk)Out-place稳定 稳定&#xff1a;如果A原本在B前面&#xff0c;而AB&#xff0c;排序之后A仍然在B的前面&#xff1b; 不…

Kotlin语法快速入门--条件控制和循环语句(2)

Kotlin语法入门–条件控制和循环语句&#xff08;2&#xff09; 文章目录 Kotlin语法入门--条件控制和循环语句&#xff08;2&#xff09;二、条件控制和循环语句1、if...else2、when2.1、常规用法2.2、特殊用法--并列&#xff1a;2.3、特殊用法--类型判断&#xff1a;2.4、特殊…

C语言进阶课程学习记录-第48课 - 函数设计原则

C语言进阶课程学习记录 - 函数设计原则 本文学习自狄泰软件学院 唐佐林老师的 C语言进阶课程&#xff0c;图片全部来源于课程PPT&#xff0c;仅用于个人学习记录

无人驾驶 自动驾驶汽车 环境感知 精准定位 决策与规划 控制与执行 高精地图与车联网V2X 深度神经网络学习 深度强化学习 Apollo

无人驾驶 百度apollo课程 1-5 百度apollo课程 6-8 七月在线 无人驾驶系列知识入门到提高 当今,自动驾驶技术已经成为整个汽车产业的最新发展方向。应用自动驾驶技术可以全面提升汽车驾驶的安全性、舒适性,满足更高层次的市场需求等。自动驾驶技术得益于人工智能技术的应用…

端口被占用的解决方案汇总

端口被占用的解决方案汇总 【一】windows系统端口被占用【二】Linux系统端口被占用【三】Linux的ps命令查找&#xff08;1&#xff09;ps命令常用的方式有三种&#xff08;2&#xff09;ps -ef |grep 8080 【一】windows系统端口被占用 &#xff08;1&#xff09;键盘上按住Wi…

【LeetCode刷题记录】21. 合并两个有序链表

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

# MySQL中的并发控制,读写锁,和锁的粒度

MySQL中的并发控制&#xff0c;读写锁&#xff0c;和锁的粒度 并发控制的概述 在数据库系统中&#xff0c;并发控制是一种用于确保当多个用户同时访问数据库时&#xff0c;系统能够提供数据的一致性和隔离性的机制。MySQL支持多种并发控制技术&#xff0c;其中包括锁机制、多…

调试 WebSocket API 技巧分享

WebSocket 是一种在单个 TCP 连接上实现全双工通信的先进 API 技术。与传统的 HTTP 请求相比&#xff0c;WebSocket 提供了更低的延迟和更高的通信效率&#xff0c;使其成为在线游戏、实时聊天等应用的理想选择。 开始使用 Apifox 的 WebSocket 功能 首先&#xff0c;在项目界…

node和go的列表转树形, 执行速度测试对比

保证数据一致性&#xff0c;先生成4000条json数据到本地&#xff0c;然后分别读取文本执行处理 node代码 node是用midway框架 forNum1:number 0forNum2:number 0//执行测试async index(){// 生成菜单列表// const menuList await this.generateMenuList([], 4000);const men…

双周总结#008 - AIGC

本周参与了公司同事对 AIGC 的分享会&#xff0c;分享了 AIGC 在实际项目中的实践经验&#xff0c;以及如何进行 AIGC 的落地。内容分几项内容&#xff1a; 什么是 AIGCAIGC 能做什么AIGC 工具 以年终总结为例&#xff0c;分享了哪些过程应用了 AIGC&#xff0c;以及 AIGC 落地…

QA测试开发工程师面试题满分问答19: url请求到响应整个过程,涉及到什么技术细节

概述 当你点击鼠标发起一个请求&#xff0c;直到页面显示响应数据&#xff0c;整个过程可以详细展开为以下步骤&#xff1a; 用户点击鼠标&#xff1a;用户在浏览器中点击某个链接或按钮&#xff0c;触发请求的发起。 URL 解析&#xff1a;浏览器解析点击的链接中的 URL&…