首页 > 其他分享 >Maven学习总结

Maven学习总结

时间:2024-03-17 13:30:02浏览次数:19  
标签:总结 maven 插件 依赖 工程 标签 jar Maven 学习

学习课程视频链接:

尚硅谷新版Maven教程(高效入门maven,上手又快又稳)_哔哩哔哩_bilibili 

尚硅谷新版SSM框架全套视频教程,Spring6+SpringBoot3最新SSM企业级开发_哔哩哔哩_bilibili

 

以下是一些零碎的知识点总结:

maven的gvap属性:
groupid:com.{公司/BU}.业务线.{子业务线},最多4级
artifactid:    产品线名-模块名,语义不重复不遗漏
version版本号格式推荐:主版本号.次版本号.修订号
packaging: .jar  .war  .pom,打包默认是jar包


将maven的web工程部署到tomcat中:点击"edit configurations",添加tomcat(local)即可。


maven工程的项目结构:326726af332b4ce68f42c111f46a4477.png

 
mvn compile: 编译项目,生成target文件,将java类编译成字节码文件
mvn clean:     清理,target被删除
mvn package:打包成jar包或者war包,保存在target目录下
mvn install:   将jar或war包安装到本地仓库,通过坐标gva找jar包
maven构建过程是需要jar包的支持
构建命令周期,会自动执行之前的操作。分为清理周期,默认周期,报告周期(mvn site)
周期包含若干个命令,命令包含若干个插件,最终进行构建的是插件。


通过定义pom文件,maven能够自动解析项目的依赖关系
通过自定义属性管理版本:version,统一规定在properties标签中,在dependencies用${}引用


scope标签:依赖范围,可以设置对应的jar包作用范围:编译环境、测试环境、运行环境。
compile:默认的环境,三个classpath都可以被引入。
test:在核心程序中无法使用,测试在打包之前,所以在war或者jar包里面没有测试的代码,测试相关的依赖也不会在jar或者war包里面。
provided:已提供依赖范围,被当前服务器Tomcat提供。编译、测试可以,不可以运行,包里也没有。例如:servlet-api。
system:系统依赖范围,不推荐使用。
runtime:main不会test不会有用,打包和运行时有效。
注意:scope是一种锦上添花的手段,如果掌握不好,就默认值,全部生效,一定不会出错。


maven中的dependencies下是引入第三方的依赖信息,打jar包。
maven在war打包时,自带的插件版本太低,无法匹配jdk17版本,需要在pom中加入一段代码build标签/plugins/plugin标签下引入插件,插件也有gva。


插件就是本地仓库中的一些jar包,插件也有坐标gva。


maven工程下build标签构建的使用场景:
1.自定义打包名称<finalName>标签,记得后缀 .war或者 .jar
2.java下的配置文件(写在resources下的)不会被打包中。在build标签里面加入resources标签,指定资源所在目录中的资源类型。b4a3b1ffbd7a42c09b5e761fd5366d5e.png
3.plugins标签,打包插件版本过低,配置更高版本插件。d6fdcbd3766a4c558cd5bf4d929622a1.png

  
依赖是否可以传递,若是compile则可以传递,若是test或provided范围,不能传递。
通过dependency标签的option标签来终止依赖的传递,option中写一个true。9106121594b9450faaf41d2102f4e073.png

 

依赖冲突会导致依赖传递终止。只要发生冲突了,后续的依赖传递全部终止
如何解决,解决方式:
①maven自动解决:1.引用路径短路优先原则  2.路径长度相同,先声明优先。要有自己的判断,idea会有显示性的问题。
②手动解决:在dependency标签中写入exclusions标签,排除依赖。a6e13f3afab8410990b965140c6a0a95.png

 


maven工程继承关系(在子工程中有parent标签表示继承):继承的是配置信息
作用:在父工程中统一管理项目的依赖信息
maven工程可以多层继承。
父工程不需要参与打包,因此打包方式应该为pom,必须要写出是pom方式打包;父工程中不需要写java代码,可以删除src。
dependencies标签,只要是父工程中的依赖都会无条件继承给子工程。
在父工程中用dependencyManagement依赖管理,此时不会导入依赖,在子工程需要手动选择继承哪些依赖,子工程的dependencies标签中,此时继承不需要写version,只需要写groupID和artifactID,此时父工程中没有依赖,只在选择导入的子工程中有。


maven工程聚合关系(在父工程有modules标签表示聚合):一键操作,一键构建。对父工程进行怎样的操作,对子工程就有相同的操作
作用:
1.将多个子项目组织在一起,方便管理和维护
2.优化构建顺序,避免出现构建依赖混乱导致构建失败的情况
3.统一管理依赖项,避免重复定义


maven私服是一种特殊的maven远程仓库,是架设在局域网内的仓库服务,用来代理位于外部的远程仓库
maven私服的优势:节省外网带宽;下载速度更快;便于部署第三方构建; 提高项目的稳定性,增强对项目的控制; 降低中央仓库的负荷压力

 

 

maven是一个软件,为java服务,作用是项目构建和依赖管理。
项目构建:是指将源代码、依赖库和资源文件等转换成可执行或可部署的应用程序的过程,在这个过程中包括编译源代码、连接数据库、打包和部署等多个过程。
maven项目构建的过程:清理、编译、测试、报告、打包、部署(部署必须是jar包形式)
依赖管理:maven可以管理项目的依赖,包括自动下载所需依赖库,自动下载依赖所需要的依赖并且保证版本没有冲突、依赖版本管理等。通过maven可以更加方便的维护项目所依赖的外部库,我们只需要编写配置即可。


注意:配置maven环境变量时,要在用户变量和系统变量中都要设置。


如何在idea中创建maven的web工程,以下是步骤:
方式一:手动创建web项目
1.创建一个javase maven工程
2.补全文件结构,main-webapp-WEB-INF-web.xml
3.pom.xml里面打war包
4.刷新maven,多小蓝点
方式二:使用插件jbl工具进行web工程管理
1.安装jbl插件
2.创建一个javase maven工程
3.maven工程-右击-jbltoweb

 

笔记代码在maven- test工程里
 

 

 

标签:总结,maven,插件,依赖,工程,标签,jar,Maven,学习
From: https://blog.csdn.net/m0_74755284/article/details/136493134

相关文章

  • Java学习 用户交互 Scanner
    Scanner是Java5提供的新特性可以用来获取用户的输入需要引入importjava.util.Scanner;类基础语法:Scannerscanner=newScanner(System.in);可以通过Scanner类的next()和nextLine()来获取输入的字符串一般在输入前使用hasnext()和hasNextLine()用来判断是否有输......
  • keil写51遇到的奇葩问题总结
    同一代码始终编译不过,一直提示关于ds1302文件的这两个函数有问题检查了半天都没检查出来问题。最后发现是因为我D盘里这个hardware文件夹和system文件夹里都存在ds1302.h,ds1302.c文件,我服了,这样也会出错。......
  • 【论文阅读】Learning Transferable Adversarial Perturbations 学习可转移的对抗性扰
    文章目录一、文章概览(一)问题提出(二)文章的主要工作(三)相关工作二、模型细节(一)模型损失函数(二)训练算法(三)扰动的可迁移三、实验:评估攻击策略在不同环境中的有效性(一)实验设置(二)向未知目标模型的可转移性(三)向未知目标数据的可转移性(四)极端的跨域可转移性(五)稳健模型的可迁移性......
  • IMBALANCED TARGET DISTRIBUTIONS LEARING(目标类别不平衡学习)
    什么是目标类别不平衡?假设你训练集中数据的目标类别的分布较为均匀,那么这样的数据集所建立的分类模型,通常会有比较好的分类效能。假设你训练集中数据的目标类别的分布不均匀(存在MajorityClass和MinorityClass的时候),那么这样的数据集造成的问题是分类模型通常倾向将所有数据预......
  • 修改Maven配置项
    0.打开Maven安装目录>conf>settings.xml1.修改本地仓库地址(默认是Default:${user.home}/.m2/repository也就是用户目录下的/.m2/repository下)修改为自己的本地仓库地址<localRepository>xxx</localRepository>2.了解servers当你将仓库发布到远程仓库时,在这里设置s......
  • Vue3学习日记 Day1
    一、简介1、简介  Vue3是新的默认版本,拥有更快的速度,更好的语法二、使用create-vue搭建Vue3项目1、创建项目1、介绍  create-vue是Vue官方新的脚手架工具,底层切换为了vite,为开发提供极速响应2、使用  2.1、确定环境条件    2.1.1已安装16.0或......
  • C语言补充学习
     在C语言中,用单引号括起来的单个字符被称为字符常量,有其对应的ASCII值,eg:'a'的ASCII的值为97   位(bit)为最小存储单元,可以存储0或1。字节(byte)为计算机的存储单位,一字节有8位。  八进制的前缀为0,输出八进制%o,想带前缀则为%#o十六进制的前缀为0x,......
  • 深度学习中使用tqdm库
    什么是tqdm?tqdm是一个快速、可扩展的Python进度条,可以在Python长循环中添加一个进度提示信息,用户只需要封装任意的迭代器tqdm(iterator)。它可以帮助我们监测程序运行的进度,估计运行的时长,甚至可以协助debug。对于在长时间运行的任务中显示进度很有用,因为它可以让用户知道任务正......
  • 时间序列预测的零样本学习是未来还是炒作:TimeGPT和TiDE的综合比较
    最近时间序列预测预测领域的最新进展受到了各个领域(包括文本、图像和语音)成功开发基础模型的影响,例如文本(如ChatGPT)、文本到图像(如Midjourney)和文本到语音(如ElevenLabs)。这些模型的广泛采用导致了像TimeGPT[1]这样的模型的出现,这些模型利用了类似于它们在文本、图像和语音方面获......
  • LeetCode题练习与总结:有效的数独
    一、题目请你判断一个 9x9的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)注意:一个有效的数独(......