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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

github版面混乱加载不出的解决办法

最近出现打开github 界面加载不成功&#xff0c;网页访问乱码&#xff0c;打开chrome的检查发现 github的github.githubassets.com 拒绝访问&#xff0c; 解法&#xff1a; 1.先打开hosts文件所在的目录C:\Windows\System32\drivers\etc 2.右键点击hosts文件-选择用记事本或者…

使用阿里云服务器部署和使用GitLab

本文阿里云百科分享使用阿里云服务器部署和使用GitLab&#xff0c;GitLab是Ruby开发的自托管的Git项目仓库&#xff0c;可通过Web界面访问公开的或者私人的项目。本教程介绍如何部署和使用GitLab。 目录 准备工作 部署GitLab环境 使用GitLab 登录GitLab 生成密钥对文件并…

EVE-NG 隐藏没有镜像的模板

eve-ng 默认情况下&#xff0c;在添加node时&#xff0c;会列出所有的模板&#xff0c;这样用着很不方便。 通过以下方式&#xff0c;可以使没有设备的模板不可见 cp /opt/unetlab/html/includes/config.php.distribution /opt/unetlab/html/includes/config.php 打开 config…

Prometheus流程图(自绘)-核心组件-流程详解

阿丹手绘流程图&#xff1a;图片可能有点小查看的时候放大看看哈&#xff01; prometheus核心组件 prometheus server Prometheus Server是Prometheus组件中的核心部分&#xff0c;负责实现对监控数据的获取&#xff0c;存储以及查询。Prometheus Server可以通过静态配置管理…

[excel]vlookup函数对相同的ip进行关联

一、需求&#xff08;由于ip不可泄漏所以简化如下&#xff09; 有两个sheet: 找到sheet1在sheet2中存在的ip&#xff0c;也就是找到有漏洞的ip 二、实现 vlookup函数有4个参数 第一个:当前表要匹配的列&#xff0c;选择第一个sheet当前行需要处理的ip即可 第二个:第二个shee…

东南大学齿轮箱故障诊断(Python代码,MSCNN结合LSTM结合注意力机制模型,代码有注释)

运行代码要求&#xff1a; 代码运行环境要求&#xff1a;Keras版本>2.4.0&#xff0c;python版本>3.6.0 1.东南大学采集数据平台&#xff1a; 数据 该数据集包含2个子数据集&#xff0c;包括轴承数据和齿轮数据&#xff0c;这两个子数据集都是在传动系动力学模拟器&am…

分布式系统监控zabbix安装部署及使用

目录 一.zabbix监控 1.什么是zabbix 2.zabbix功能 3.zabbix的构成 4.zabbix的3种架构 4.1 C/S架构 4.2 分布式架构&#xff1a;zabbix-proxy-client架构 4.3 master-node-client架构 6.zabbix监控模式 二.zabbix部署及图形化页面显示设置(192.168.158.25) 1.zabbix安装…

JIRA:项目管理的秘密武器

引言 在当今动态且快速变化的商业环境中&#xff0c;项目管理已经成为任何组织成功的关键因素。能够有效地管理项目&#xff0c;保证项目在设定的时间和预算内按照预期的质量完成&#xff0c;是每个项目经理的目标。为了实现这个目标&#xff0c;项目经理需要依赖强大的工具&a…

思科交换机和路由器使用TFTP备份和还原配置文件

&#xff08;1&#xff09;给交换机配置管理地址&#xff0c;保证交换机与服务器相连通 SW1(config)#int vlan 1 SW1(config-if)#ip add 192.168.1.1 255.255.255.0 SW1(config-if)#no shut SW1#write &#xff08;2&#xff09;备份startup-config到服务器 SW1#copy startup…

React 入门学习

React 入门 一、基本认识1.1、前言1.2、什么是1.3、编译<br>1.4、特点1.5、高效 二、React环境和基本使用2.1、环境搭建2.2、脚手架项目基本使用2.2.1、src2.2.2、public2.2.3、package.json 三、JSX的理解和使用四、模块与模块化, 组件与组件化的理解4.1、模块与组件4.2…

chrome V3 插件开发 基础

目录 准备popup通信popup 发消息给 backgroundpopup 发消息给 content长期连接 如何页面上添加一个按钮&#xff1f;tabs.onUpdatedcontent-script.jsinject.js 右键菜单chrome.contextMenus举个例子添加关于报错&#xff08;cannot create item with duplicate id XXX&#xf…

鉴源实验室丨汽车网络安全攻击实例解析(二)

作者 | 田铮 上海控安可信软件创新研究院项目经理 来源 | 鉴源实验室 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 引言&#xff1a;汽车信息安全事件频发使得汽车行业安全态势愈发紧张。这些汽车网络安全攻击事件&#xff0c;轻则给企业产品发布及产品…

spring-自定义AOP面向切面注解--统一切面处理-登陆信息采集

2023华为OD统一考试&#xff08;AB卷&#xff09;题库清单-带答案&#xff08;持续更新&#xff09;or2023年华为OD真题机考题库大全-带答案&#xff08;持续更新&#xff09; 1. 先写一个登陆记录注解&#xff08;//记录&#xff1a;XXX时间&#xff0c;XXX姓名&#xff0c;XX…

【人工智能前沿弄潮】——生成式AI系列:Diffusers应用 (1) 了解Pipeline 、模型和scheduler

Diffusers旨在成为一个用户友好且灵活的工具箱&#xff0c;用于构建针对您的用例量身定制的扩散系统。工具箱的核心是模型和scheduler。虽然DiffusionPipeline为了方便起见将这些组件捆绑在一起&#xff0c;但您也可以拆分管道并单独使用模型和scheduler来创建新的扩散系统。 …

使用AI工具Lama Cleaner一键去除水印、人物、背景等图片里的内容

使用AI工具Lama Cleaner一键去除水印、人物、背景等图片里的内容 前言前提条件相关介绍Lama Cleaner环境要求安装Lama Cleaner启动Lama CleanerCPU方式启动GPU方式启动 使用Lama Cleaner测试结果NO.1 检测框NO.2 水印NO.3 广州塔NO.4 人物背景 参考 前言 由于本人水平有限&…

Faker库详解 - Python中的随机数据生成器

文章目录 Faker介绍Faker安装Faker使用基本使用方法随机生成人物相关的基础信息随机生成地理相关的信息随机生成网络相关的信息随机生成日期相关的信息随机生成数字/字符串/文本随机生成列表/元组/字典/集合/迭代器/json随机生成文件相关的信息随机生成颜色/表情每次请求获取相…

2023“钉耙编程”中国大学生算法设计超级联赛(5)

Typhoon 计算几何&#xff0c;点到线段距离 String Magic (Easy Version) Manacher可持久化线段树 Touhou Red Red Blue DP 模拟 Expectation (Easy Version) 签到&#xff0c;组合数学 Tree 树形DP Cactus Circuit 仙人掌图&#xff0c;tarjan找简单环 Counting Stars 暴力…

Mac安装nvm教程及使用

nvm 是 node 版本管理器&#xff0c;也就是说一个 nvm 可以管理多个 node 版本&#xff08;包含 npm 与 npx&#xff09;&#xff0c;可以方便快捷的安装、切换 不同版本的 node。 1、直接通过brew安装 执行命令&#xff1a;brew install nvm PS&#xff1a; 如果没有安装br…

机器学习笔记:李宏毅diffusion model

1 概念原理 首先sample 一个都是噪声的vector然后经过denoise network 过滤一些杂质接着继续不断denoise&#xff0c;直到最后出来一张清晰图片 【类似于做雕塑&#xff0c;一开始只是一块石头&#xff08;噪声很杂的雕塑&#xff09;&#xff0c;慢慢雕刻出想要的花纹】 同一个…

MySQL修改编码

插入中文乱码,我电脑上没有出现&#xff0c;我只是来记录一下 MySQL版本: 8.0.34Windows 查看编码 mysql中输入下面的命令 show variables like ‘character_%’; 乱码的一般是图片中划红线的部分不是utf8 character_set_database是设置数据库的默认编码的 character_set_ser…