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博客

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

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

相关文章

Spring中Bean的“一生”(生命周期)

文章目录 一、图解二、文字解析总结 一、图解 >注&#xff1a;处于同一行的执行顺序是从左往右 二、文字解析 SpringBean的生命周期总体分为四个阶段&#xff1a;实例化>属性注入>初始化>销毁 Step1 实例化Bean&#xff1a;根据配置文件中Bean的定义&#xff0c;…

Pytorch量化之Post Train Static Quantization(训练后静态量化)

使用Pytorch训练出的模型权重为fp32&#xff0c;部署时&#xff0c;为了加快速度&#xff0c;一般会将模型量化至int8。与fp32相比&#xff0c;int8模型的大小为原来的1/4, 速度为2~4倍。 Pytorch支持三种量化方式&#xff1a; 动态量化&#xff08;Dynamic Quantization&…

微服务服务拆分和远程调用

一、服务架构比较 单体架构&#xff1a;简单方便&#xff0c;高度耦合&#xff0c;扩展性差&#xff0c;适合小型项目。例如&#xff1a;学生管理系统 分布式架构&#xff1a;松耦合&#xff0c;扩展性好&#xff0c;但架构复杂&#xff0c;难度大。适合大型互联网项目&#x…

python的gui界面程序爬虫,python的gui界面怎么打开

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;python的gui界面怎么打开&#xff0c;python的gui界面程序爬虫&#xff0c;今天让我们一起来看看吧&#xff01; Python支持多种图形界面的第三方库&#xff0c;包括&#xff1a; wxWidgets Qt GTK Tkinter&#xf…

[信号与系统系列] 正弦振幅调制之差拍信号

当将具有不同频率的两个正弦曲线相乘时&#xff0c;可以创建一个有趣的音频效果&#xff0c;称为差拍音符。这种现象听起来像颤音&#xff0c;最好通过选择一个频率非常小的信号与和另一个频率大约1KHz的信号&#xff0c;把二者混合从而听到。一些乐器能够自然产生差拍音符。使…

idea如何上传项目到github(超详细)

idea如何上传项目到github 1、IDEA配置2、项目上传到本地仓库2.1、创建本地git仓库2.2、Add操作2.3、Commit操作 3、项目上传到Github4、拿到登录Github的token 1、IDEA配置 File-Settings-VersionControl-Git Git的安装路径下bin目录下的git.exe可执行文件 可以直接点 Gene…

基于TF-IDF+TensorFlow+词云+LDA 新闻自动文摘推荐系统—深度学习算法应用(含ipynb源码)+训练数据集

目录 前言总体设计系统整体结构图系统流程图 运行环境Python 环境TensorFlow环境方法一方法二 模块实现1. 数据预处理1&#xff09;导入数据2&#xff09;数据清洗3&#xff09;统计词频 2. 词云构建3. 关键词提取4. 语音播报5. LDA主题模型6. 模型构建 系统测试工程源代码下载…

十九、docker学习-Dockerfile

Dockerfile 官网地址 https://docs.docker.com/engine/reference/builder/Dockerfile其实就是我们用来构建Docker镜像的源码&#xff0c;当然这不是所谓的编程源码&#xff0c;而是一些命令的集合&#xff0c;只要理解它的逻辑和语法格式&#xff0c;就可以很容易的编写Docke…

Android 面试重点之Framework (Handler篇)

近期在网上看到不少Android 开发分享的面试经验&#xff0c;我发现基本每个面经中多多少少都有Framework 底层原理的影子。它也是Android 开发中最重要的一个部分&#xff0c;面试官一般会通过 Framework底层中的一些逻辑原理由浅入深进行提问&#xff0c;来评估应聘者的真实水…

对强缓存和协商缓存的理解

浏览器缓存的定义&#xff1a; 浏览器缓存是浏览器在本地磁盘对用户最近请求过的文档进行存储&#xff0c;当访问者再次访问同一页面时&#xff0c;浏览器就可以直接从本地磁盘加载文档。 浏览器缓存分为强缓存和协商缓存。 浏览器是如何使用缓存的&#xff1a; 浏览器缓存…

HarmonyOS应用开发者基础认证考试题库

此博文为HarmonyOS应用开发者基础认证考试的最后的大考&#xff0c;要求100分取得90分方可获取证书、现将考试的题库进行分享&#xff0c;希望能帮到大家。但是需要注意的是&#xff0c;题库会不定时的进行题目删减&#xff0c;但是大概的内容是不会进行改变的。真心希望这篇博…

MongoDB 使用总结

&#x1f353; 简介&#xff1a;java系列技术分享(&#x1f449;持续更新中…&#x1f525;) &#x1f353; 初衷:一起学习、一起进步、坚持不懈 &#x1f353; 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正&#x1f64f; &#x1f353; 希望这篇文章对你有所帮助,欢…

数据结构和算法——哈希查找冲突处理方法(开放地址法-线性探测、平方探测、双散列探测、再散列,分离链接法)

目录 开放地址法&#xff08;Open Addressing&#xff09; 线性探测&#xff08;Linear Probing&#xff09; 散列表查找性能分析 平方探测&#xff08;Quadratic Probing&#xff09; 定理 平方探测法的查找与插入 双散列探测法&#xff08;Double Hashing&#xff09…

爬虫011_元组高级操作_以及字符串的切片操作---python工作笔记030

获取元组的下标对应的值 注意元组是不可以修改值的,只能获取不能修改 但是列表是可以修改值的对吧

界面控件DevExpress WPF Chart组件——拥有超快的数据可视化库!

DevExpress WPF Chart组件拥有超大的可视化数据集&#xff0c;并提供交互式仪表板与高性能WPF图表库。DevExpress Charts提供了全面的2D / 3D图形集合&#xff0c;包括数十个UI定制和数据分析/数据挖掘选项。 PS&#xff1a;DevExpress WPF拥有120个控件和库&#xff0c;将帮助…

亚马逊对AIGC的定义

大家好&#xff0c;这里是Doker,最近AIGC非常火&#xff0c;这里我们聊一下什么是AIGC. 一、 AIGC 介绍与典型行业应用场景 ​AIGC 又称生成式 AI (Generative AI)&#xff0c;是继专业生产内容&#xff08;PGC&#xff0c; Professional-generated Content&#xff09;、用户…

人脸识别场景下Faiss大规模向量检测性能测试评估分析

在前面的两篇博文中&#xff0c;主要是考虑基于之前以往的人脸识别项目经历结合最近使用到的faiss来构建更加高效的检索系统&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a; 《基于facenetfaiss开发构建人脸识别系统》 Facenet算法的优点&#xff1a;高准确率&#…

DoIP学习笔记系列:(三)用CAPL脚本过“安全认证”,$27服务实现

文章目录 1. 如何调用接口通过安全认证?如何新建CAPL工程,在此不再赘述,本章主要分享一下如何在CAPL中调用DoIP接口、diag接口进行DoIP和诊断的测试。 注意:CANoe工具本身的使用没什么难的,所谓会者不难难者不会,各位小伙伴有疑问要多问,多交流,往往难事都只是一层窗户…

ElasticSearch:环境搭建步骤

1、拉取镜像 docker pull elasticsearch:7.4.0 2、创建容器 docker run -id --name elasticsearch -d --restartalways -p 9200:9200 -p 9300:9300 -v /usr/share/elasticsearch/plugins:/usr/share/elasticsearch/plugins -e "discovery.typesingle-node" elasti…

图的拓扑排序算法

拓扑排序 什么是拓扑排序&#xff1f; 比如说&#xff0c;我们平时工作过程中一定听过一个词叫做—不能循环依赖。什么意思&#xff1f; A依赖BCD&#xff0c;B依赖CD&#xff0c;C依赖D&#xff0c;D依赖EF&#xff0c;想要获得A的话&#xff0c;首先就要先有EF&#xff0c;有…