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

Maven快速入门

本文主要是把当初跳过的maven再看一遍,此时再看发现自己的理解能力也更强了些,然后大家必须将分模块设计与开发熟练掌握,这样可以使我们的代码编写更加清晰,然后私服主要是企业团队将开发上传,这个因为我还没工作,所以只了解了一下,其实用git上传也可以,只不过用私服可以让我们下载企业内部的依赖。

一般为了规范,顺序一般是 parent、maven 坐标、modules、properties

注意install安装到本地仓库指的是安装在自己设置的maven仓库中,然后如果包含就能正常打包了

maven依赖应先从本地仓库查找,如果没有则从私服查找最后才从中央仓库(镜像仓库)下载

一、Maven

可以先idea全局设置配好

配置:

创建maven项目:

版本号一般不用手动设置,采用默认即可

maven坐标:

idea导入maven项目

方式一:

注意直接Remove Module可以将模块从当前工程移除,但磁盘中还没有真正删除。

方式二:

注意导入的是maven项目,所以没有pom肯定就不算也导入不成功。

二、依赖管理

依赖配置

  • 依赖:指当前项目运行所需要的 jar 包,一个项目中可以引入多个依赖。

  • 配置:

    1. 在 pom.xml 中编写 <dependencies> 标签

    2. 在 <dependencies> 标签中 使用 <dependency> 引入坐标

    3. 定义坐标的 groupId,artifactId,version

    4. 点击刷新按钮,引入最新加入的坐标

依赖传递

直接在pom中右键可以直接查看这些依赖关系图,然后按住ctrl可以放大,alt是望远镜

  • 排除依赖 排除依赖指主动断开依赖的资源,被排除的资源无需指定版本。

总之就是这个pom中不会包含已排除的依赖,主要针对间接依赖,直接依赖优先级高,比如A依赖B,C,然后排除了C,那么A直接依赖的C仍然生效

依赖范围

依赖的 jar 包,默认情况下,可以在任何地方使用。可以通过<scope>...</scope>设置其作用范围。 作用范围:

  • 主程序范围有效。(main 文件夹范围内)

  • 测试程序范围有效。(test 文件夹范围内)

  • 是否参与打包运行。(package 指令范围内)

默认的package打包只能将当前资源打包进去,而所依赖的jar包不会打进去

生命周期

可以在idea中跳过某个阶段比如test

三、分模块设计与开发

1. 什么是分模块设计?  - 将项目按照功能拆分成若干个子模块  
2. 为什么要分模块设计?  - 方便项目的管理维护、扩展,也方便模块间的相互调用,资源共享  
3. 注意事项  - 分模块设计需要先针对模块功能进行设计,再进行编码。不会先将工程开发完毕,然后进行拆分

主要目的: 方便项目维护、复用、共享等

注意新建模块时检查路径是不是在我们idea中的代码项目中

引入我们的其他模块直接引入我们自己项目的maven坐标依赖即可

继承与聚合

继承

注意和java类似,只能单继承,不能多继承

而且若父子工程都配置了同一个依赖的不同版本,那么以子工程版本为准

jar:普通模块打包,springboot 项目基本都是 jar 包(内嵌 tomcat 运行)因为可以使用命令java-jar就可以直接启动springboot项目
war:普通 web 程序打包,需要部署在外部的 tomcat 服务器中运行  而war包不支持,所以用的少
pom:父工程或聚合工程,该模块不写代码,仅进行依赖管理

<!-- 继承Spring Boot父项目 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.0</version> <relativePath/>  -- 表示父工程的相对路径,因为这个不是自己实现的,是官方提供的,所以从本地/远程仓库查找即可 </parent>

而且由于我们的parent项目是父工程,不用编写代码,所以创建maven父工程之后将src目录可以删除掉

./表示当前目录查找 ../表示上一级目录查找

如果在其他位置,则需要relativePath手动指定一下路径,否则默认是../pom.xml

<parent><groupId>com.itheima</groupId><artifactId>tlias-parent</artifactId><version>1.0-SNAPSHOT</version><relativePath>../tlias-parent/pom.xml</relativePath>
</parent>

groupId如果一样,那么子工程就不用写groupId了,写artifactId和version即可

版本锁定

同一个项目中,引人的依赖应尽量保持一致,而且有的模块可能不用继承父类的依赖,这时候一个个修改版本就很麻烦

<dependencyManagement> 与 <dependencies>的区别是什么?
<dependencies> 是直接依赖,在父工程配置了依赖,子工程会直接继承下来。
<dependencyManagement> 是统一管理依赖版本,不会直接依赖,还需要在子工程中引入所需依赖 (无需指定版本)

如果父工程是单纯dependencies则子工程继承之后就会自动携带上

当然自定义命名也要规范有意义,而且放在上边当修改版本时就不用往下滑动了

注意下方的这个依赖不用写在父工程中,因为父工程继承的starterWeb内部已经配置了版本信息,所以不用写,直接引人即可
<!--WEB开发-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

聚合

其实我们的父工程既是继承中的父工程,也是聚合工程

  • 聚合 将多个模块组织成一个整体,同时进行项目的构建。

  • 聚合工程 一个不具有业务功能的“空”工程(有且仅有一个 pom 文件)

  • 作用 快速构建项目(无需根据依赖关系手动构建,直接在聚合工程上构建即可)

总结

  • 作用

    • 聚合用于快速构建项目

    • 继承用于简化依赖配置、统一管理依赖

  • 相同点:

    • 聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中

    • 聚合与继承均属于设计型模块,并无实际的模块内容

  • 不同点:

    • 聚合是在聚合工程中配置关系,聚合可以感知到参与聚合的模块有哪些

    • 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己

四、私服

主要是为了团队协作。而且是再局域网中,maven中deploy发布

其实用git也是一样的

仓库组主要是区分中央仓库和共享仓库的

版本: release(正式版) 和 snapshot(快照版本)

http://www.xdnf.cn/news/18479.html

相关文章:

  • Day26 树的层序遍历 哈希表 排序算法 内核链表
  • 数据库服务语句应用
  • 【机器学习深度学习】多模态典型任务与应用全景
  • 深入理解Java多线程:状态、安全、同步与通信
  • Trae 编辑器在 Python 环境缺少 Pylance,怎么解决
  • 服务器支持IPv6吗?如何让服务器支持IPv6
  • 爬楼梯变式
  • Unreal Engine ATriggerVolume
  • [TG开发]部署机器人
  • Unreal Engine AActor
  • 【typenum】 22 类型级别二进制对数运算(Logarithm2)
  • 【Java SE】深入理解继承与多态
  • openstack的novnc兼容问题
  • GitCode 疑难问题诊疗:全面指南与解决方案
  • 94. 城市间货物运输 I, Bellman_ford 算法, Bellman_ford 队列优化算法
  • 智慧工厂烟雾检测:全场景覆盖与精准防控
  • Java基础 8.22
  • 2-3.Python 编码基础 - 类型检测与类型转换
  • 集成电路学习:什么是SVM支持向量机
  • AI 大模型 “进化史”:从参数竞赛到场景落地,技术突破藏着哪些逻辑?
  • Unreal Engine UFloatingPawnMovement
  • 【ECharts】2. ECharts 性能优化
  • kafka的rebalance机制是什么
  • CentOS 10安装Ollama
  • 12-Linux系统用户管理及基础权限
  • 机试备考笔记 18/31
  • Nginx(一)认识Nginx
  • Eino 开源框架全景解析 - 以“大模型应用的搭积木指南”方式理解(一)
  • Azure TTS Importer:一键导入,将微软TTS语音接入你的阅读软件!
  • LeetCode 3195.包含所有 1 的最小矩形面积 I:简单题-求长方形四个范围