Maven基础总结

news2024/9/25 15:25:10

前言

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.coloradmin.cn/o/854144.html

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

相关文章

利用Google Docs的评论功能投递钓鱼链接

情报背景 利用Google drive等可信云服务进行的网络钓鱼攻击活动日益增长&#xff0c;这种攻击手段利用了高可信度的云服务骗取受害者的信任&#xff0c;并且可以绕过基于域名的安全策略。 近期Avanan公司发现了一种新的邮件钓鱼方式&#xff0c;攻击者利用Google docs的评论功…

【CAS定制】定制化密码编码器--支持密码组合编码或加密 PasswordEncoder

CAS中&#xff0c;默认支持的PasswordEncoder只能通过一种密码算法进行编码或加密&#xff0c;但是日常场景经常存在组合编码的需求&#xff0c;这就需要我们去定制一种支持密码组合编码或加密的编码器。 文章目录 场景定制目标定制方案定制代码 场景 一般项目中有很多需要进行…

HTTP协议讲解

HTTP协议简介 超文本传输协议&#xff08;英文&#xff1a;HyperText Transfer Protocol&#xff0c;缩写&#xff1a;HTTP&#xff09;是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。 HTTP的发展是由蒂姆伯纳斯-李于1989年在欧洲核…

贝锐蒲公英:智能组网助力企业智慧工地信息化建设

随着现代信息化技术的不断发展&#xff0c;为了让企业工地施工管理、监督更为高效、精准&#xff0c;及时发现并处理工地单位施工中的安全和质量问题&#xff0c;视频监控已成为“智慧工地”建设中不可或缺的重要环节。 视频监控系统主要通过安装摄像头对施工现场进行实时监控和…

RK3568蓝牙程序开发过程

1、搭建蓝牙开发环境 蓝牙开发可以使用C语言开发或python语言开发&#xff0c;使用的是蓝牙开发库为bluez库。 本文开发使用python语言开发&#xff0c;安装bluez库&#xff0c;可以使用pip install PyBluez来安装。 如果安装不上的话&#xff0c;可以使用sudo apt install pyt…

Springboot中拦截GET请求获取请求参数验证合法性

目录 目的 核心方法 完整代码 创建拦截器 注册拦截器 测试效果 目的 在Springboot中创建拦截器拦截所有GET类型请求&#xff0c;获取请求参数验证内容合法性防止SQL注入&#xff08;该方法仅适用拦截GET类型请求&#xff0c;POST类型请求参数是在body中&#xff0c;所以下面…

ADB连接安卓手机提示unauthorized

近期使用airtest进行自动化测试时&#xff0c;因为需要连接手机和电脑端&#xff0c;所以在使用adb去连接本人的安卓手机vivo z5时&#xff0c;发现一直提示unauthorized。后来经过一系列方法尝试&#xff0c;最终得以解决。 问题描述&#xff1a; 用数据线将手机接入电脑端&…

数据分析 绘图工具

prism呢… 拼dd上看到卖prism的终身包 GraphPad Prism GraphPad Prism 就是为生物科研统计作图而生的一款数据处理绘图软件&#xff0c;它不仅能分析数据&#xff0c;还能快速作图&#xff0c;简直是科研人的福音&#xff01; GraphPad 最新版本拥有最新的气泡图&#xff0…

Springboot中使用过滤器校验PSOT类型请求参数内容

目录 目的 实现步骤 完整代码 目的 在Springboot中创建过滤器&#xff0c;用来过滤所有POST类型请求并获取body中的参数进行校验内容是否合法&#xff1b;该方法仅适用于POST类型请求&#xff0c;因为POST和GET请求的参数位置不一样所以处理方式也不一样&#xff0c;如果想要…

恒盛策略:早盘A股三大指数表现分化 CRO概念板块逆势涨超6%

周三&#xff08;8月9日&#xff09;&#xff0c;A股三大指数体现分化&#xff0c;到上午收盘&#xff0c;上证指数跌0.36%&#xff0c;报3249.02点&#xff1b;深证成指跌0.28%&#xff0c;创业板指涨0.24%&#xff1b;沪深两市合计成交额4550.78亿元&#xff0c;总体来看&…

DARPA-TC-engagement5-theia部分数据格式分析

转换出来的jsons数据主要分为四大类&#xff1a;Event、Subject、Object和Principal&#xff0c;分别代表系统事件、主体、客体和用户。各种大类中子类的数量&#xff0c;取决于CDM的版本。ShadeWatcher使用的是e3的数据&#xff0c;采用的是CDM18&#xff0c;而e5默认使用的是…

HTTP——十一、Web的攻击技术

HTTP 一、针对Web的攻击技术1、HTTP 不具备必要的安全功能2、在客户端即可篡改请求3、针对Web应用的攻击模式 二、因输出值转义不完全引发的安全漏洞1、跨站脚本攻击2、SQL 注入攻击3、OS命令注入攻击4、HTTP首部注入攻击5、邮件首部注入攻击6、目录遍历攻击7、远程文件包含漏洞…

Win10的日历软件中怎么新增日程安排及提醒?

在经济发展加速的时代&#xff0c;职场中做好时间管理的重要性不言而喻&#xff0c;而想要在工作中做好时间管理&#xff0c;关键在于按时完成每项日程安排。所以每天在使用win10电脑办公时新增日程安排并设置提醒不仅是非常有必要的&#xff0c;而且是提高效率和生活质量的重要…

Java课题笔记~ JavaWeb概述/开发基础

JavaWeb概述/开发基础 1.XML基础 &#xff08;1&#xff09;XML概述 &#xff08;2&#xff09;XML语法 &#xff08;3&#xff09;DTD约束 &#xff08;4&#xff09;Schema约束&#xff08;XML Schema 比 DTD 更强大&#xff09; 2.Web基础知识 Web是一个分布式的超媒…

Celery的基本使用

1.Celery介绍 1.1 Celery是什么&#xff1f; Celery是Python开发的简单、灵活可靠的、处理大量消息的分布式任务调度模块专注于实时处理的异步任务队列同时也支持任务调度 Celery本身不含消息服务&#xff0c;它使用第三方消息服务来传递任务&#xff0c;目前&#xff0c;Ce…

设置height:100%无效的原因以及两种解决方法

原因&#xff1a;我们知道在把盒子宽度自适应为浏览器窗口宽度&#xff0c;只需设置width:100%就可轻松解决问题&#xff0c;但是让盒子的高度自适应浏览窗口的高度并非那么容易&#xff0c;这是因为css内部计算的原因 <!-- 高度实际为字体大小 --> <div class"…

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…

logo设计用什么工具比较好?为你推荐这9个

在海报设计工作中&#xff0c;logo设计是必不可少的一步&#xff0c;今天本文为大家推荐9个特别好用的logo生成器&#xff0c;一起来看看吧&#xff01; 1、即时设计 即时灵感是一个结合了AI技术的logo生成器&#xff0c;它无需设计师提供设计素材&#xff0c;只要在文本框中…

软件系统测试报告

1.简介 1.1.编写目的 本文档是对重庆市XXX项目验收测试所做的说明&#xff0c;为充分利用已有的软硬件资源&#xff0c;配合对系统应用模块的运行测试方案,查缺补漏完善系统的各项具体功能,保证项目的顺利进行&#xff0c;本测试报告有助于实现以下目标&#xff1a; 明确本次…

【Linux命令详解 | grep命令】 grep命令用于在文件中搜索指定模式的文本,功能强大且常用

文章标题 简介一&#xff0c;参数列表二&#xff0c;使用介绍1. 使用基本模式搜索2. 忽略大小写匹配3. 反向匹配4. 递归搜索目录5. 显示文件名6. 显示行号7. 显示上下文行8. 启用扩展正则表达式9. 将模式视为固定字符串10. 使用颜色高亮显示匹配文本 总结 简介 在Linux系统中&…