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

Maven基础总结

前言

Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。

基本要求掌握

配置Maven环境直接查。

得会在IDEA创建Maven的java项目吧、会创建Maven的web项目吧、会创建多模块项目吧。

得会配置插件pligin、依赖dependency吧

一、Maven四大特性

1、依赖管理系统

由于写项目需要导入非常多jar包,由于版本依赖,需要下载指定版本并且需要后续升级版本,手动麻烦!

操作:在配置文件内写好jar包的仓库路径、名称、版本,他会自动把所有指定的jar包下载好。

<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version>
</dependency>

坐标属性:

groupId: 定义实际项目-公司名称(jar包所在仓库路径);

artifactId:定义Maven模块-项目名;

version:定义版本。

2、多模块构建

在 Maven 中需要定义一个 parent POM 作为一组 module 的聚合 POM。                                       在该 POM 中可用 <modules> 标签定义一组子模块。                                                                      parent POM 中的 build 配置以及依赖配置都会自动继承给子模块。

3、统一的项目结构

        不同IDE项目结构不同,但是只要是Maven管理的项目,项目结构一致,避免不同IDE打开产生错误。

4、统一的构建模型和插件机制

通过插件(plugin)形式引入服务器

<plugin>  <groupId>org.mortbay.jetty</groupId><artifactId>maven-jetty-plugin</artifactId><version>6.1.25</version><configuration><scanIntervalSeconds>10</scanIntervalSeconds><contextPath>/test</contextPath></configuration>
</plugin>

二、Maven环境变量配置

mvn -v查看Maven版本,如果没有配置,上网看教程安装配置maven环境变量(Mac版)_ElenaYu的博客-CSDN博客

1、下载压缩包到自己选定的文件夹

2、设置镜像源、指定jar包仓库路径

3、编辑环境变量配置文件 重启。成功

三、IDEA集成Maven环境

注意要全局配置Maven环境。如果仅仅是局部配置仅针对当前项目,新项目仍需重新配置。

① 你的 maven 安装目录。
② 你的 maven setting.xml 文件
③ 你的 maven 仓库,所有下载的 jar 包都会缓存到这个文件夹。

四、Maven创建Java项目

1、创建new project 选择Maven

 2、自定义项目名及目录名

 3、项目存储信息核对

显示出src目录结构需要等待一段时间。

4、往pom.xml文件写入配置信息

5、手动创建目录并标记

手动创建resources 【directory目录】 此时此目录为普通目录。                                                       Mark标记为resources root让Maven识别为资源目录

6、使用Maven命令处理项目

如编译、打包为jar包供其他项目使用

五、Maven创建Web项目

与创建Java项目类似。

1、创建new project 选择模板

 2、自定义项目名、目录名

 3、项目存储信息核对

 4、修改pom.xml配置信息

Webapp目录存放资源 jsp页面 html页面等。

 1、删除插件管理

(以下内容直接删除)

<pluginManagement><plugins><plugin></plugin>
...</plugins>
</pluginManagement>

 2、添加服务器插件配置信息

普通Java项目只需要打包 或者编译就可以;Web项目需要看见页面,需要服务器支持,有jetty 和 Tomcat俩类任选一。使用服务器要去其官网下载对应的Maven插件,将服务器的插件配置文件粘贴上。

五、Maven仓库

常下载的文件:jar包 & 插件

分类:

        远程仓库 :中央仓库(https://mvnrepository.com/  )、私服、其他公共库

        本地仓库

Maven根据坐标寻找构件时,首先查看本地仓库,有就用,没有就远程仓库查找下载到本地仓库。

私服也就是本局域网内的镜像源。

六、Maven环境下构建多模块项目

作用:精简化项目

创建Java项目,注意勾选SDK版本

1、创建父模块与子模块

1、创建maven_parent模块

 2、创建maven_dao模块

1、在maven_parent基础上创建模块

 2、选择模板

3、创建maven_service模块

与创建maven_dao模块一模一样

4、创建maven_controller模块

与创建maven_dao模块只有一个区别:在选择模版时选择Webapp

2、设置模块配置文件

设置jdk版本(1.8)、单元测试junit版本、删除多余配置(<pluginManagement>插件管理所有内容)

3、设置模块之间的依赖

controller模块要依赖service模块,service模块要依赖dao模块。即controller要调用service内方法,service要调用dao内方法。

对应的操作就是:在service配置文件中添加dao的<dependency>

 在controller配置文件中添加service的<dependency>

<!--Web层要创建servlet 引入servlet的API--> 在mvn仓库搜索servlet版本就可以找到对应的dependency

maven_controller模块里面是Webapp模块,需要手动创建Java包并定义为source root 才可以创建类

七、Maven的打包操作

jar包:Java项目的压缩包                                                                                                                          war包:Web项目的压缩包

通过pom.xml配置方式实现打包时的环境选择。

1、添加对应的目录结构

        1、web项目一般无java文件夹,手动添加并标记

         2、手动添加sources目录并标记、并添加配置文件

2、在pom.xml配置文件中添加Profile配置

3、添加资源文件配置

添加到pom.xml的build标签内

 

 4、执行打包操作

 

 -P指定要打包的profile的id 

skip表示跳过测试的打包

八、Maven依赖的基本概念

1、格式举例:

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

2、三个元素:

1、依赖的基本坐标:groupId, artifactId, version(Maven根据坐标才能找到需要的依赖)

2、依赖的类型:Type (大部分情况下不需要声明。 默认值为jar)

3、依赖的范围:Scope (compile,test,provided,runtime,system)

4. Optional:标记依赖是否可选

5. Exclusions: 用来排除传递性依赖

*compile: 编译依赖范围。

若无指定,则默认使用该依赖范围。使用此依赖范围的Maven依赖,对于编译、测试、运行三种classpath都有效。

*test: 测试依赖范围。

使用此依赖范围的Maven依赖,只对于测试classpath有效,在编译主代码或运行项目的使用时将无法使用此类依赖。典型的例子就是JUnit,它只有在编译测试代码及运行测试的时候才需要。

*provided: 已提供依赖范围。

   使用此依赖范围的Maven依赖,对于编译和测试classpath有效,但在运行时无效。例servlet-api,编译和测试项目的时候需要该依赖,但在运行项目的时候,由于容器已经提供,就不需要Maven重复地引入一遍(如:servlet-api)

*runtime: 运行时依赖范围。

使用此依赖范围的Maven依赖,对于测试和运行classpath有效,编译主代码时无效。例JDBC驱动实现,项目主代码的编译只需要JDK提供的JDBC接口,只有在执行测试或运行项目的时候才需要实现上述接口的具体JDBC驱动。

*system: 系统依赖范围。

  该依赖与三种classpath的关系,和provided依赖范围完全一致。但使用system范围依赖时必须通过systemPath元素显式地指定依赖文件的路径。由于此类依赖不是通过Maven仓库解析的,而且往往与本机系统绑定,可能造成构建的不可移植,因此应该谨慎使用。

3、传递性依赖

    传递依赖机制, 让我们在使用某个jar的时候就不用去考虑它依赖了什么。也不用担心引入多余的依赖。 Maven会解析各个直接依赖的POM,将那些必要的间接依赖,以传递性依赖的形式引入到当前项目中。

注意: 传递依赖有可能产生冲突!!

A --> B --> C (2.0)
A --> E --> C (1.0)

如果A下同时存在两个不同version的C,冲突!!

(使用exclusions标签选取同时适合A、B的版本)

<dependencies>  <dependency>  <groupId>A</groupId>  <artifactId>A</artifactId>  <version>xxx</version>  <exclusions>  <exclusion>  <groupId>C</groupId>  <artifactId>C</artifactId></exclusion>  </exclusions>  </dependency><dependency>  <groupId>B</groupId>  <artifactId>B</artifactId>              </dependency>  
</dependencies>
这里的<exclusions> <exclusion> <groupId>C</groupId> <artifactId>C</artifactId></exclusion> </exclusions> 来排除冲突的

结尾:常见错误

1、pom.xml配置文件爆红解决

原因:依赖包下载不了

IDEA中Maven依赖包下载不了的问题解决方案汇总_idea maven包下载不下来_谜一样的码农的博客-CSDN博客

2、Cannot resolve symbol ‘HttpServlet‘

手动添加jar包

Cannot resolve symbol ‘HttpServlet‘_DarkYoung•的博客-CSDN博客

相关文章:

Maven基础总结

前言 Maven 是一个项目管理工具&#xff0c;可以对 Java 项目进行构建、依赖管理。 基本要求掌握 配置Maven环境直接查。 得会在IDEA创建Maven的java项目吧、会创建Maven的web项目吧、会创建多模块项目吧。 得会配置插件pligin、依赖dependency吧 一、Maven四大特性 1、…...

Java 编程实战:如何用 Java 编写一个简单而强大的 Tomcat

学习完了JavaWeb&#xff0c;为了深入了解tomcat&#xff0c;打算手撕tomcat搭建自己的tomcat&#xff0c;希望对来访小伙伴也有帮助 引言 Tomcat 是一个开源的 Web 服务器和 Servlet 容器&#xff0c;它可以提供动态 Web 内容的处理和交互功能。Tomcat 是用 Java 语言编写的&a…...

【JavaSE】数组的定义与使用

详解数组 数组的基本概念什么是数组数组的创建及初始化数组的使用 数组是引用类型基本类型变量与引用类型变量的区别引用变量认识 null 数组的应用场景数组练习二维数组 数组的基本概念 什么是数组 数组可以看成是相同类型元素的一个集合。在内存中是一段连续的空间。比如现实…...

银河麒麟安装php7.1.33

银河麒麟V10兼容CentOS 8 安装过程与CentOS类似。 TencentOS3.1安装PHPNginxredis测试系统_乐大师的博客-CSDN博客 可以参考之前我写的文章。 不过有2个细节不同&#xff0c;下面说下。 问题1&#xff1a;编译错误提示“error:off_t undefined” 解决方法&#xff1a; 编…...

Kubernetes集群部署上篇(安装部署,但是集群网络未部署)

第四阶段 时 间&#xff1a;2023年8月9日 参加人&#xff1a;全班人员 内 容&#xff1a; Kubernetes集群部署上篇 目录 一、Kubernetes部署方式 &#xff08;一&#xff09;minikube &#xff08;二&#xff09;二进制包 &#xff08;三&#xff09;Kubeadm Kubea…...

跨境电商中的安全挑战与隐擎Fox指纹浏览器的应用

随着全球互联网的蓬勃发展&#xff0c;跨境电商已经成为了国际贸易的重要组成部分。然而&#xff0c;跨境电商的迅速崛起也伴随着一系列安全挑战&#xff0c;其中之一就是恶意活动和隐私泄露。为了应对这些挑战&#xff0c;诸多技术手段被开发出来&#xff0c;其中隐擎Fox指纹浏…...

10. Docker Swarm(一)

目录 1、前言 2、Docker Swarm体系架构 2.1、简单介绍 2.2、体系架构 3、简单使用 3.1、环境准备 3.2、初始化master节点 3.3、建立worker节点 3.4、查看集群的节点信息 3.5、部署应用 3.5.1、创建Dockerfile文件 3.5.2、构建镜像 3.5.3、将镜像上传到Docker仓库 …...

【MySQL】InnoDB存储引擎详解

InnoDB引擎是MySQL5.5版本之后默认的存储引擎 逻辑存储结构 首先是表空间Tablespace&#xff08;ibd文件&#xff09;&#xff1a;一个mysql实力可以对应多个表空间&#xff0c;用于存储及记录&#xff0c;索引等数据 这些存储记录&#xff0c;索引等数据中是用段(Segment)来…...

组合求和-矩阵连乘所有加括号方式_2023_08_12

矩阵链加括号方式总数 前言 矩阵链乘积的瓶颈在于其标量运算的次数&#xff0c;不同的结合次序对其时间性能影响远大于矩阵乘积运算本身&#xff0c;可以看到许多教材上把求解矩阵标量运算的最优解作为动态规划的示例&#xff0c;问题隐含动态规划两大特征&#xff1a; 最优子…...

《3D 数学基础》12 几何图元

目录 1 表达图元的方法 1.1 隐式表示法 1.2 参数表示 1.3 直接表示 2. 直线和射线 2.1 射线的不同表示法 2.1.1 两点表示 2.1.2 参数表示 2.1.3 相互转换 2.2 直线的不同表示法 2.2.1 隐式表示法 2.2.2 斜截式 2.2.3 相互转换 3. 球 3.1 隐式表示 1 表达图元的方…...

【设计模式——学习笔记】23种设计模式——备忘录模式Memento(原理讲解+应用场景介绍+案例介绍+Java代码实现)

案例引入 游戏角色有攻击力和防御力&#xff0c;在大战Boss前保存自身的状态(攻击力和防御力)&#xff0c;当大战Boss后攻击力和防御力下降&#xff0c;可以从备忘录对象恢复到大战前的状态 传统设计方案 针对每一种角色&#xff0c;设计一个类来存储该角色的状态 【分析】…...

致谢丨感谢有你,JumpServer开源项目九周年致谢名单

2014年到2023年&#xff0c;JumpServer开源项目已经走过了九年的时间。感谢以下社区贡献者对JumpServer项目的帮助和支持。 因为有你&#xff0c;一切才能成真。 JumpServer开源项目贡献者奖杯将于近日邮寄到以上贡献者手中&#xff0c;同时JumpServer开源项目组还准备了一份小…...

使用 Python 和 Flask 构建简单的 Restful API 第 1 部分

一、说明 我将把这个系列分成 3 或 4 篇文章。在本系列的最后&#xff0c;您将了解使用flask构建 restful API 是多么容易。在本文中&#xff0c;我们将设置环境并创建将显示“Hello World”的终结点。 我假设你的电脑上安装了python 2.7和pip。我已经在python 2.7上测试了本文…...

【深度学习所有损失函数】在 NumPy、TensorFlow 和 PyTorch 中实现(2/2)

一、说明 在本文中&#xff0c;讨论了深度学习中使用的所有常见损失函数&#xff0c;并在NumPy&#xff0c;PyTorch和TensorFlow中实现了它们。 (二-五)见 六、稀疏分类交叉熵损失 稀疏分类交叉熵损失类似于分类交叉熵损失&#xff0c;但在真实标签作为整数而不是独热编码提…...

Hazel 引擎学习笔记

目录 Hazel 引擎学习笔记学习方法思考引擎结构创建工程程序入口点日志系统Premake\MD没有 cpp 文件的项目会出错include 到某个库就要包含这个库的路径&#xff0c;注意头文件展开 事件系统 获取和利用派生类信息预编译头文件抽象窗口类和 GLFWgit submodule addpremake 脚本禁…...

Linux系统下Redis3.2集群

本节主要学习reids主从复制的概念&#xff0c;作用&#xff0c;缺点&#xff0c;流程&#xff0c;搭建&#xff0c;验证&#xff0c;reids哨兵模式的概念&#xff0c;作用&#xff0c;缺点&#xff0c;结构&#xff0c;搭建&#xff0c;验证等。 文章目录 一、redis主从复制 …...

Android图形-合成与显示-SurfaceTestDemo

目录 引言&#xff1a; 主程序代码&#xff1a; 结果呈现&#xff1a; 小结&#xff1a; 引言&#xff1a; 通过一个最简单的测试程序直观Android系统的native层Surface的渲染显示过程。 主程序代码&#xff1a; #include <cutils/memory.h> #include <utils/L…...

高压放大器怎么设计(高压放大器设计方案)

高压放大器是一种用于将低电压信号转换成高电压信号的电子设备&#xff0c;广泛应用于通信、雷达、医疗设备等领域。在设计高压放大器时&#xff0c;需要考虑多种因素&#xff0c;如输入输出信号的特性、电路结构的选择、电源和负载匹配等。本文将介绍高压放大器的设计方法和注…...

SpringBoot yml配置注入

yaml语法学习 1、配置文件 SpringBoot使用一个全局的配置文件 &#xff0c; 配置文件名称是固定的 application.properties 语法结构 &#xff1a;keyvalue application.yml 语法结构 &#xff1a;key&#xff1a;空格 value 配置文件的作用&#xff1a;修改SpringBoot自动…...

中科亿海微乘法器(LPMMULT)

引言 FPGA&#xff08;可编程逻辑门阵列&#xff09;是一种可在硬件级别上重新配置的集成电路。它具有灵活性和可重构性&#xff0c;使其成为处理各种应用的理想选择&#xff0c;包括数字信号处理、图像处理、通信、嵌入式系统等。在FPGA中&#xff0c;乘法器是一种重要的硬件资…...

Redis_持久化(AOF、RDB)

6. Redis AOF 6.1 简介 目前&#xff0c;redis的持久化主要应用AOF&#xff08;Append Only File&#xff09;和RDF两大机制&#xff0c;AOF以日志的形式来记录每个写操作&#xff08;增量保存&#xff09;&#xff0c;将redis执行过的所有指令全部安全记录下来&#xff08;读…...

开源数据库Mysql_DBA运维实战 (部署服务篇)

前言❀ 1.数据库能做什么 2.数据库的由来 数据库的系统结构❀ 1.数据库系统DBS 2.SQL语言(结构化查询语言) 3.数据访问技术 部署Mysql❀ 1.通过rpm安装部署Mysql 2.通过源码包安装部署Mysql 前言❀ 1.数据库能做什么 a.不论是淘宝&#xff0c;吃鸡&#xff0c;爱奇艺…...

【Java学习】System.Console使用

背景 在自学《Java核心技术卷1》的过程中看到了对System.Console的介绍&#xff0c;编写下列测试代码&#xff0c; public class ConsoleTest {public static void main(String[] args) {Console cs System.console();String name cs.readLine("AccountInfo: ");…...

从零学算法154

154.已知一个长度为 n 的数组&#xff0c;预先按照升序排列&#xff0c;经由 1 到 n 次 旋转 后&#xff0c;得到输入数组。例如&#xff0c;原数组 nums [0,1,4,4,5,6,7] 在变化后可能得到&#xff1a; 若旋转 4 次&#xff0c;则可以得到 [4,5,6,7,0,1,4] 若旋转 7 次&#…...

95 | Python 设计模式 —— 策略模式

策略模式(Strategy Pattern) 引言 策略模式是一种行为型设计模式,它定义了一系列的算法,并将每个算法封装在独立的策略类中,使得这些算法可以相互替换,而不影响客户端的使用。策略模式可以让客户端根据不同的需求选择不同的算法,从而使得系统更加灵活和可扩展。 在本…...

【BASH】回顾与知识点梳理(十九)

【BASH】回顾与知识点梳理 十九 十九. 循环 (loop)19.1 while do done, until do done (不定循环)19.2 for...do...done (固定循环)19.3 for...do...done 的数值处理(C写法)19.4 搭配随机数与数组的实验19.5 shell script 的追踪与 debug19.6 what_to_eat-2.sh debug结果解析 该…...

Selenium之css怎么实现元素定位?

世界上最远的距离大概就是明明看到一个页面元素站在那里&#xff0c;但是我却定位不到&#xff01;&#xff01; Selenium定位元素的方法有很多种&#xff0c;像是通过id、name、class_name、tag_name、link_text等等&#xff0c;但是这些方法局限性太大&#xff0c; 随着自动…...

计算机基础之RAID技术

概述 RAID&#xff0c;Redundant Array of Independent Disks&#xff0c;独立磁盘冗余阵列&#xff0c;一种把多块独立的硬盘&#xff08;物理硬盘&#xff09;按不同的方式组合起来形成一个硬盘组&#xff08;逻辑硬盘&#xff09;&#xff0c;从而提供比单个硬盘更高的存储…...

辽宁线上3D三维虚拟工厂生产仿真系统应用场景及优势

工厂虚拟仿真是一种基于计算机技术和虚拟现实技术的数字化解决方案&#xff0c;它可以通过模拟工厂中的设备、流程和操作&#xff0c;来为工程师和操作人员提供了一个沉浸式的虚拟环境&#xff0c;帮助他们更好地了解和优化工厂生产过程。 工厂VR三维可视化技术为工业生产提供了…...

csrf跨站请求的相关装饰器、Auth模块(模块的使用、相关方法、退出系统、修改密码功能、注册功能)、扩展默认的auth_user表

一、csrf跨站请求的相关装饰器 django.middleware.csrf.CsrfViewMiddlewareDjango中有一个中间件对csrf跨站做了验证&#xff0c;我只要把csrf的这个中间件打开&#xff0c; 那就意味着所有的方法都要被验证 在所有的视图函数中&#xff1a;只有几个视图函数做验证只有几个函数…...