2024-Java-Maven学习笔记

embedded/2024/9/25 19:16:49/

Maven

Maven是一个Java项目管理和构建工具,作用:定义(规范)项目结构、项目依赖、使用统一的方式自动化构建(clean、compile)。

提供了一套依赖管理机制:利用仓库统一管理jar包,利用依赖传递的特性解决jar包版本冲突问题。

视频教程

总结

核心掌握目标
安装maven安装、环境变量、maven配置文件修改
工程创建gav属性理解、IDEA创建工程、项目结构
依赖管理依赖添加、依赖传递、版本提取、导入依赖错误解决
构建管理构建过程、构建场景、构建周期
继承和聚合理解继承和聚合的作用和配置
  • 所有依赖在父maven项目中管理,子maven无需使用版本;
  • 可选依赖放入;
  • 所有依赖的版本号通过管理;
  • 管理所有子模块;

Maven配置文件

需要修改的地方如下:

<!--  jar包下载本地地址 -->
<localRepository>D:\data\maven-repository</localRepository><!--  jar包下载仓库 -->
<mirrors><mirror><id>nexus-aliyun</id><mirrorOf>central</mirrorOf><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public</url></mirror><mirror><id>huaweicloud</id><mirrorOf>*</mirrorOf><name>huawei Cloud</name><url>https://repo.huaweicloud.com/repository/maven/</url></mirror><mirror><id>central</id><mirrorOf>central</mirrorOf><name>Maven Repository Switchboard</name><url>https://repo2.maven.org/maven2/</url></mirror></mirrors>

约定大于配置

pom.xml详解

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!-- 本工程的坐标信息,保证唯一性 --><groupId>com.lywtimer</groupId><artifactId>j-pure</artifactId><version>1.0-SNAPSHOT</version><!-- 设置打包方式 默认jar,常用war,pom --><packaging>pom</packaging><modules><module>backend</module><module>demo</module></modules><!--通常去设置依赖的版本好处:统一管理版本;多个jar包使用同一个版本时,简化配置${junit.jupiter.version}--><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><com.mysql.version>8.3.0</com.mysql.version><org.junit.jupiter.version>5.10.2</org.junit.jupiter.version></properties><!--通过一个坐标信息去引用jar包去 https://mvnrepository.com/ 中央仓库找需要确认到本地仓库,如果出现异常问题可以删掉,重新下载。 D:\data\maven-repository\org\junit\jupiter\junit-jupiter-api\5.10.2--><!-- 对子工程必须要的依赖,放在这里 --><dependencies><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>${com.mysql.version}</version></dependency></dependencies><!--对子工程不是必须要的依赖,放在这里虽然子工程还需要做一次依赖,但可以做版本控制--><dependencyManagement><dependencies><!--引用本地的项目,需要 install--><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>${org.junit.jupiter.version}</version><!--手动排除依赖--><exclusions><!--                <exclusion>--><!--                    <groupId>com.mysql</groupId>--><!--                    <artifactId>mysql-connector-j</artifactId>--><!--                </exclusion>--></exclusions><!--依赖范围编译(main/java)测试(main/test)运行/打包(包含在打的包中)test       编译× 测试√  打包×     junitprovided   编译√ 测试√  打包×     servletcompile    编译√ 测试√  打包√     默认runtime    编译× 测试√  打包√     反射、数据库驱动system = provided 不会依赖仓库中的jar包,结合<systemPath>使用,已经废弃1.首先 依赖范围建议,哪怕所有的范围都设置compile,也不影响正常使用2.中央仓库会提供scope,IDEA有自动补全功能3.大多数包都是compile--><!--作用访问是 test、provided 就不会传递--><scope>test</scope><!--是否传递 默认是false,会传递--><optional>false</optional></dependency></dependencies></dependencyManagement>
</project>

生命周期

生命周期会依次执行 clean validate compile test package verify installTest* 的类会在 test 执行的时候被扫描install:会下载到本地仓库

依赖传递的配置

#被依赖项目的pom.xml<groupId>com.mszlu</groupId><artifactId>trans</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.0.33</version><!--作用访问是 test、provided 就不会传递--><scope>compile</scope><!--是否传递 默认是false,会传递--><optional>true</optional></dependency></dependencies>#依赖项目的pom.xml
<dependencies><!--引用本地的项目,需要 install--><dependency><groupId>com.mszlu</groupId><artifactId>trans</artifactId><version>1.0-SNAPSHOT</version></dependency>
</dependencies>#如果被依赖项目无法处理,通过两种方式可以解除依赖
#引入不一致版本的依赖(覆盖)
#使用exclusion手动排除

创建聚合工程

右键父工程目录 → New → Module → Parent选 None

<!-- 父工程聚合子工程 pom.xml --><modules><module>backend</module><module>demo</module></modules><!-- 两个子工程依赖后,依赖就会传递 -->  
<!-- 在父工程中的生命周期方法会在所有管理的模块依次执行 -->  

Maven继承

聚合工程的另外一种体现,把依赖统一到父工程中。

<!-- 修改子工程的 pom.xml -->
<parent><groupId>org.example</groupId><artifactId>j-pure</artifactId><version>1.0-SNAPSHOT</version>
</parent><!-- 手动删除重复的配置 -->
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>

http://www.ppmy.cn/embedded/4847.html

相关文章

如何加速量子网络?——光子“打包”发送,突破远程传输极限

未来的光纤量子网络有望支持远距离量子计算机之间的通信。目前&#xff0c;长距离快速传输量子信息存在重大挑战&#xff0c;因为绝大多数的光子无法在传输中生存下来。 与逐个发送光子相比&#xff0c;成组地向远程站点发送光子能在未来的量子网络中更快地建立量子链路 现在&a…

【从浅学到熟知Linux】环境变量详谈(含使用程序获取环境变量的3种方法、如何查看环境变量)

&#x1f3e0;关于专栏&#xff1a;Linux的浅学到熟知专栏用于记录Linux系统编程、网络编程及数据库等内容。 &#x1f3af;每天努力一点点&#xff0c;技术变化看得见 文章目录 环境变量基本概念查看环境变量的方法环境变量相关命令环境变量组织方式及获取环境变量的3种方法验…

tcp bbr pacing 的对与错

前面提到 pacing 替代 burst 是大势所趋&#xff0c;核心原因就是摩尔定律逐渐失效&#xff0c;主机带宽追平交换带宽&#xff0c;交换机不再能轻易吸收掉主机突发&#xff0c;且随着视频类流量激增&#xff0c;又不能以大 buffer 做带宽后备。因此&#xff0c;主机必须 pacing…

政企即时通讯APP:快速构建专属、安全的智慧办公解决方案

在数字化时代&#xff0c;政企单位对信息系统的依赖日益加深&#xff0c;但随之而来的信息安全隐患也不容忽视。组织内部信息系统的安全问题&#xff0c;尤其是在人员调整或离职时&#xff0c;管理员账号管理的混乱&#xff0c;以及敏感资料泄露和业务系统破坏的风险&#xff0…

C++必修:从C语言到C++的过渡(上)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C学习 贝蒂的主页&#xff1a;Betty’s blog 1. 什么是C C&#xff08;c plus plus&#xff09;是一种计算机高级程序设计语言&…

【leetcode面试经典150题】63. 删除链表的倒数第 N 个结点(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主&#xff0c;题解使用C语言。&#xff08;若有使用其他语言的同学也可了解题解思路&#xff0c;本质上语法内容一致&…

idea错误地commit后如何处理

如果你想使用命令行重新初始化 Git 仓库&#xff0c;可以按照以下步骤进行&#xff1a; 删除该项目的.git文件夹 打开命令行终端。 切换到项目所在的目录&#xff0c;使用 cd 命令。 在项目目录下运行以下命令来重新初始化 Git 仓库 git init这将在当前目录下创建一个新的 Git …