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

相关推荐
失散131 小时前
分布式专题——10.2 ShardingSphere-JDBC分库分表实战与讲解
java·分布式·架构·shardingsphere·分库分表
失散133 小时前
分布式专题——10.4 ShardingSphere-Proxy服务端分库分表
java·分布式·架构·shardingsphere·分库分表
Bellafu6664 小时前
spring项目部署后为什么会生成 logback-spring.xml文件
java
递归不收敛4 小时前
一、Java 基础入门:从 0 到 1 认识 Java(详细笔记)
java·开发语言·笔记
沐浴露z5 小时前
【Java SpringAI智能体开发学习 | 2】SpringAI 实用特性:自定义Advisor,结构化输出,对话记忆持久化,prompt模板,多模态
java·spring·springai
小沈同学呀5 小时前
创建一个Spring Boot Starter风格的Basic认证SDK
java·spring boot·后端
码农小伙5 小时前
通俗易懂地讲解JAVA的BIO、NIO、AIO
java·nio
不要再敲了6 小时前
JDBC从入门到面试:全面掌握Java数据库连接技术
java·数据库·面试
潇I洒7 小时前
若依4.8.1打包war后在Tomcat无法运行,404报错的一个解决方法
java·tomcat·ruoyi·若依·404
凤山老林7 小时前
SpringBoot 轻量级一站式日志可视化与JVM监控
jvm·spring boot·后端