2024-Java-Maven学习笔记

news/2024/5/4 5:07:42

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.mrgr.cn/p/70728144

相关文章

Devexpress GridControl下拉框实现联动

实现效果1.先在设计界面绑定数据列 1.点击设计器2.绑定数据列2. 绑定GridView的 FocusedRowChanged事件//定义两个下拉框 _RIcmbtype:不良分类 _RIcmbdefect:不良信息RepositoryItemComboBox _RIcmbtype = new RepositoryItemComboBox();RepositoryItemComboBox _RIcmbdefe…

ArtCoder——通过风格转换生成多元化艺术风格二维码

简介 ArtCoder能够从原始图像&#xff08;内容&#xff09;、目标图像&#xff08;风格&#xff09;以及想要嵌入的信息中&#xff0c;生成具有艺术风格的二维码。这一过程类似于通常的图像风格转换&#xff0c;但特别针对二维码的特点进行了优化和调整。 通过这种方法&#…

原型设计——墨语笔记APP

一、对比分析墨刀、Axure、Mockplus等原型设计工具的各自的适用领域及优缺点。 墨刀、Axure、Mockplus等原型设计工具各有特色,下面我将从适用领域、优点和缺点三个方面对它们进行对比分析。 1.墨刀 适用领域:墨刀主要适用于快速原型设计和高保真度的交互设计,特别适合移动端…

linux7-iptables与firewall

1.iptables 1 规则链的默认策略拒绝动作只能是 DROP,而不能是 REJECT。 2 在日常运维工作中,经常会使用ping命令来检查对方主机是否在线,而向防火墙的INPUT 3 规则链中添加一条允许 ICMP 流量进入的策略规则就默认允许了这种 ping 命令检测行为。 4 [root@linuxprobe~]# ipt…

centos7安装mysql5.7笔记

1 配置yum仓库 1.1更新密钥 #更新密钥 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 1.2 下载使用wget命令下载MySQL的repo文件 #下载使用wget命令下载MySQL的repo文件 wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm 2 使用…

[题解] [洛谷 P1174] 打砖块

[洛谷 P1174] 打砖块 题目描述 有 \(n\) 行 \(m\) 列的砖块和 \(k\) 发子弹,每个砖块都有一个得分,每次可以用一发子弹打碎某一列最下面的砖块并得到相应的得分。有的砖块在打碎后可以获得一发额外子弹的奖励。求该游戏的最大得分。输入格式 第一行有 \(3\)个正整数, \(n,m,…

南昌航空大学大一下学期java-题目集1~3总结性Blog——苏礼顺23201608

一、前言——总结三次题目集的知识点、题量、难度等情况 《面向对象程序设计》这一门课,是教授我们设计代码,掌握类、类间关系,以及面向对象的三大设计原则——封装、继承、多态等面向对象的基本概念和方法,并以面向对象的编程语言java语言设计程序。因此在这三次的题目集都…

前端切图练习,仿哔哩哔哩导航栏

效果 首先看看目标最后完成效果:思路 思路是分成左 右两个区域 左边: 分成三个重复的模块模块内分成上面(图片),下面(文字)右边 这种一个矩形就是一个li标签PS使用技巧 cmd+r 唤出左右游标卡尺 cmd+n 新建一个文件,最好先复制了,然后就可以建立一个和剪贴板一样的内容 代码 <…

如何创建响应式HTML电子邮件模板

在这个适合初学者的指南中,你将学习如何创建一个响应式电子邮件模板。你将跟随逐步说明以及代码片段设计一个在任何设备上都看起来很棒的电子邮件模板。 这个项目非常适合渴望掌握电子邮件设计基础的新手! (本文视频讲解:java567.com) 步骤 1:设置基本结构 要构建一个电子…

机器学习波士顿房价

流程 数据获取导入需要的包引入文件,查看内容划分训练集和测试集调用模型查看准确率 数据获取 链接&#xff1a;https://pan.baidu.com/s/1deECYRPQFx8h28BvoZcbWw?pwdft5a 提取码&#xff1a;ft5a --来自百度网盘超级会员V1的分享导入需要的包 import pandas as pd imp…

PS1045L-ASEMI超低Low VF肖特基PS1045L

PS1045L-ASEMI超低Low VF肖特基PS1045L编辑:ll PS1045L-ASEMI超低Low VF肖特基PS1045L 型号:PS1045L 品牌:ASEMI 封装:TO-227 最大平均正向电流(IF):10A 最大循环峰值反向电压(VRRM):45V 最大正向电压(VF):0.44V~0.47V 工作温度:-40C~150C 反向恢复时间:5ns 芯片…

System.AggregateException: 发生一个或多个错误.....

System.AggregateException: 发生一个或多个错误。 ---> Microsoft.WebTools.Shared.Exceptions.WebToolsException: 生成失败。检查输出窗口了解更多详细信息。 --- 内部异常堆栈跟踪的结尾 --- ---> (内部异常 #0) Microsoft.WebTools.Shared.Exceptions.WebToolsExcep…

OOP课程PTA题目集1-3总结

一. 前言第一次pta比较简单,主要考察了类的关联与依赖,只有一道大题与4个小题 第二次pta比较难,主要考察了类设计,有一道大题与3个小题 第三次pta较难,主要考察了类设计,日期类的基本使用,有2个小题与1个大题二.设计与分析 第一次题目集7-1 设计一个风扇Fan类 源码:点击…

Spring Boot 框架集成Knife4j

本次示例使用 Spring Boot 作为脚手架来快速集成 Knife4j,Spring Boot 版本2.3.5.RELEASE,Knife4j 版本2.0.7&#xff0c;完整代码可以去参考 knife4j-spring-boot-fast-demo pom.xml 完整文件代码如下 <?xml version"1.0" encoding"UTF-8"?> &l…

写了个低技术力的爬虫信息收集工具

原理差不多就是把网站源代码下载下来,然后再源代码里用正则识别出url,再对url进行请求,得到响应码和网页标题 使用截图:github链接: **https://github.com/sesmof/url-fucker ** 第一次写工具,多多包涵

(数据结构代码,总结,自我思考)=> { return 个人学习笔记; } 【To be continued~】

俗话说 “学而不思则罔”,是时候复习和整理一下自己先前的学习历程了! Chapter-One 《BinarySearch》 public static int binarySearch (int[] a, int target) {int i = 0, j = a.length - 1;while (i <= j) {int m = (i + j) >>> 1; // 求中位数,但是是用位运算…

springcloud第4季 springcloud-alibaba之nacos篇-配置中心

一 nacos的配置中心 1.1 配置中心 namespace&#xff0c;group&#xff0c;dataid 之间的关系 1.2 配置样例

06节-51单片机-LCD1602调试工具

欢迎订阅专栏&#xff0c;持续为您更新&#xff01; 1.LCD1602调试工具 使用LCD1602液晶屏作为调试窗口&#xff0c;提供类似printf函数的功能&#xff0c;可实时观察单片机内部数据的变换情况&#xff0c;便于调试和演示。 本文提供的LCD1602代码属于模块化的代码&#xff…

回归问题求解 python---梯度下降+最小二乘法

MSE = 1/m * ∑i=1m(yi−y^i)2 a = [1., 2., 3., 4., 5., 6., 7., 8., 9.] b = [3., 5., 7., 9., 11., 13., 15., 17., 19.] points = [[a[i],b[i]] for i in range(len(a))]lr= 0.001 eps = 0.0001 m = len(points) last_error = float(inf) k = b = grad_k = grad_b =…

前端点击按钮触发复制文本

1. 效果展示&#xff1a; 点击复制小图标进行内容的复制 在这里我们先不考虑适用插件的情况&#xff0c;因为如果只是简单的复制&#xff0c;则不需要插件 2. 绑定事件 这里我们以vue为例子&#xff0c; 原生和react我后面补上 <i slot"prefix" class"i…