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(快照版本)

相关推荐
编啊编程啊程2 小时前
JUC之AQS
java·开发语言·jvm·c++·kafka
jingfeng5145 小时前
C++模板进阶
java·c++·算法
杨杨杨大侠5 小时前
附录 1:[特殊字符] Maven Central 发布完整指南:从零到成功部署
java·spring boot·maven
ahauedu5 小时前
AI资深 Java 研发专家系统解析Java 中常见的 Queue实现类
java·开发语言·中间件
小厂永远得不到的男人6 小时前
基于 Spring Validation 实现全局参数校验异常处理
java·后端·架构
计算机编程小咖7 小时前
《基于大数据的农产品交易数据分析与可视化系统》选题不当,毕业答辩可能直接挂科
java·大数据·hadoop·python·数据挖掘·数据分析·spark
艾莉丝努力练剑7 小时前
【C语言16天强化训练】从基础入门到进阶:Day 7
java·c语言·学习·算法
老华带你飞7 小时前
校园交友|基于SprinBoot+vue的校园交友网站(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·校园交友网站