Java中的Maven与集合
1. Maven是什么?
在Java项目开发中,我们通常会涉及到第三方依赖的使用,例如 JUnit、Log4j、MyBatis 等框架。它们大多数以 .jar
包的形式存在。为了将这些 .jar
包集成到项目中,Maven 提供了非常便利的依赖管理机制。
如果直接将这些 .jar
包手动导入到项目中,会出现以下问题:
- 项目体积过大,不利于项目发布。
- 不同版本的
.jar
包可能会出现冲突和兼容性问题。
Maven 解决了这些问题。其本质是一个项目管理工具,通过一种称为 POM(Project Object Model) 的机制来管理项目的构建、依赖和生命周期。
1.1 Maven的基本概念
Maven 是用 Java 编写的,它管理的所有内容都以面向对象的形式进行设计。Maven 将一个项目视作一个对象,这个对象就称为 POM (项目对象模型)。pom.xml
文件就是这个对象的配置文件,Maven 通过加载这个文件来了解项目的相关信息。在这里插入图片描述

1.2 依赖管理
Maven 的第二个核心是 依赖管理 ,即它管理项目所需的所有依赖资源(如 .jar
包)。这些依赖可以存放在以下三种仓库中:
- 本地仓库 :存储在开发者的本地计算机中。
- 私服 :公司或组织内部的仓库。
- 中央仓库 :Maven 官方维护的公共仓库,所有开源的资源都可以在这里找到。
1.3 Maven的作用
Maven 的主要作用可以分为三类:
- 项目构建 :提供标准的、跨平台的自动化构建项目方式。
- 依赖管理 :便捷地管理项目依赖资源,避免版本冲突等问题。
- 统一开发结构 :提供标准的项目开发结构。
各目录存放资源类型说明:
src/main/java:项目java源码
src/main/resources:项目的相关配置文件(比如mybatis配置,xml映射配置,自定义配置文件等)
src/main/webapp:web资源(比如html,css,js等)
src/test/java:测试代码
src/test/resources:测试相关配置文件
src/pom.xml:项目pom文件
1.4 Maven环境搭建
Maven 的安装非常简单,它是一个绿色软件,只需解压即可。在解压后,配置环境变量(如 JAVA_HOME
和 MAVEN_HOME
),即可开始使用。
maven的官网
maven是一个绿色软件,解压即安装,非常容易,
我们找到今日课程资料中的安装程序,将里面的apache-maven-3.6.3-bin.zip直接解压到E盘根目录下即可
解压完成后我们可以查看一下maven自己的一个目录结构如下
各目录结构说明:
bin:可执行程序目录
boot:maven自身的启动加载器
conf:maven配置文件的存放目录
lib:maven运行所需库的存放目录
环境配置
maven的运行需要java的环境,需要我们配置JAVA_HOME环境变量
下面在去配置MAVEN_HOME的环境变量
1:我的电脑-------->属性--------->高级系统设置---------->新建系统变量MAVEN_HOME
```bash
# 配置MAVEN_HOME环境变量
MAVEN_HOME=D:/apache-maven-3.6.3
```
1.5 Maven仓库和坐标
Maven 仓库中的资源(如 .jar
包)使用 坐标 来定位。坐标包括:
- groupId :组织名称,通常是域名反写(如:
org.mybatis
)。 - artifactId :资源名称,通常是项目名称(如:
mybatis
)。 - version :资源的版本号(如:
3.5.4
)。
如果要查询maven某一个资源的坐标,我们通常可以去maven的仓库进行查询
- maven坐标的作用:
使用唯一标识,唯一性定义资源位置,通过该标识可以将资源的识别与下载工作交由机器完成
1.5.1 仓库配置
开发者要在自己电脑上做开发,首先要做的就是配置本地仓库
默认情况下maven本地仓库的位置在哪儿呢?
我们可以选择在全局进行配置,在maven的配置文件conf/settings.xml中可以找到它的说明
因为我们平时开发项目所有的资源会比较多,而且各种资源还有好多的版本,资源与资源之间还有相互依赖的这种情况,因此本地仓库保存的内容会非常的多,它的体积会很大,如果放在C盘下不太合适,因此我们可以自己来指定一个位置作为本地仓库的位置,这个指定同样是需要来修改maven的配置文件conf/settings.xml
在我们前面查看这个文件的时候大家会发现它提供了一个标签
这个标签中配置的值就是我们本地仓库的位置,但是这个标签是在注释中的,也就是说目前不起作用,因此我们要将该标签挪出注释,并修改标签内的值,指定一个新的位置作为本地仓库的位置,例如
E:\maven_repository
另外大家需要注意
:maven默认连接的远程仓库位置是:(即中央仓库)
国外的中央仓库
Maven 默认连接到中央仓库,但也可以配置镜像站点(如阿里云仓库)来加速资源下载。
```java
alimaven
aliyun maven
http://maven.aliyun.com/nexus/content/groups/public/
central
aliyunmaven
*
阿里云公共仓库
https://maven.aliyun.com/repository/public
```
1.6 Maven生命周期与插件
Maven生命周期与插件
maven的构建生命周期描述的是一次构建过程经历了多少个事件
比如我们项目最常用的一套流程如下:
当然maven的生命周期不止这一套,总共分为3套,每套里面包含的事件如下
(1)clean:清理工作
pre-clean:执行一些在clean之前的工作
clean:移除上一次构建产生的所有文件
post-clean:执行一些在clean之后立刻完成的工作
(2)default:核心工作,例如编译,测试,打包,部署等
对于default生命周期,每个事件在执行之前都会将之前的所有事件依次执行一遍
(3)site:产生报告,发布站点等
pre-site:执行一些在生成站点文档之前的工作
site:生成项目的站点文档
post-site:执行一些在生成站点文档之后完成的工作,为部署做准备
site-deploy:将生成的站点文档部署到特定的服务器上
JDBC驱动与url
5.x的驱动和url
```java
url = jdbc:mysql://localhost:3306/user?useUnicode=true&characterEncoding=utf8
driver = com.mysql.jdbc.Driver
```
8.x的驱动和url
```java
url = jdbc:mysql://localhost:3306/ssq?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false
driver = com.mysql.cj.jdbc.Driver
```
1.7 Maven依赖范围
依赖的jar默认情况可以在任何地方可用,可以通过scope标签设定其作用范围
这里的范围主要是指以下三种范围
(1)主程序范围有效(src/main目录范围内)
(2)测试程序范围内有效(src/test目录范围内)
(3)是否参与打包(package指令范围内)
此外:scope
标签的取值有四种:compile,test,provided,runtime
在idea中集成Maven

- 注:这行代码真挺有用的 我每次忘了都会看这里重新写上来
-DarchetypeCatalog=internal
2. 集合
2.1 数组的缺点
Java 中的数组有以下缺点:
- 长度固定 :数组的大小在定义时必须确定,无法动态扩展。
- 不适合增删操作 :插入、删除元素需要频繁移动元素,效率较低。
2.2 集合的优势
Java 中引入了集合(Collection)来解决数组的这些缺点。集合是一个存储对象数据的容器,其大小可动态变化,且能更方便地进行元素增删操作。
集合有以下特点:
- 大小可变 :集合的大小是动态变化的。
- 存储引用类型 :集合中只能存储引用类型的数据。
2.3 数组与集合的比较
特性 | 数组 | 集合 |
---|---|---|
长度 | 固定 | 动态变化 |
存储类型 | 可以存储基本类型和引用类型 | 只能存储引用类型 |
使用场景 | 数据个数和类型确定的场景 | 数据个数不确定且需要增删元素的场景 |
2.4 集合体系
Java 的集合体系主要分为两类:
- Collection :单列集合,每个元素只包含一个值。
-
Map :双列集合,每个元素包含两个值(键值对)。
-
注:这个图也很重要
3. 小案例:京东商城
3.1 项目框架
我们将实现一个简单的京东商城应用,功能包括用户登录、注册、查询商品和添加商品等。
```java
package com.shool.test2;
import java.util.Scanner;
public class Test2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("欢迎使用京东商城");
System.out.println("1. 登录");
System.out.println("2. 注册");
System.out.println("3. 查询所有商品");
System.out.println("4. 添加商品");
System.out.println("5. 退出");
System.out.println("请选择:");
int choice = sc.nextInt();
switch (choice) {
case 1:
System.out.println("登录操作");
break;
case 2:
System.out.println("注册操作");
break;
case 3:
System.out.println("查询所有商品");
break;
case 4:
System.out.println("添加商品");
break;
case 5:
System.out.println("退出");
System.exit(0);
break;
}
}
}
}
```
3.2 用户实体类 Users
```java
package com.shool.test2;
import java.util.Scanner;
/**
●
@version 1.0
●
@Author yishu
●
@Date 2024-12-24 10:48
●
@注释
*/
public class Test2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (true){
System.out.println("欢迎使用京东商城");
System.out.println("1.登录");
System.out.println("2.注册");
System.out.println("3.查询所有商品");
System.out.println("4.添加商品");
System.out.println("5.退出");
System.out.println("请选择:");
int chioce = sc.nextInt();
switch (chioce){
case 1:
System.out.println("登录操作");
break;
case 2:
System.out.println("注册操作");
break;
case 3:
System.out.println("查询所有商品");
break;
case 4:
System.out.println("添加商品");
break;
case 5:
System.out.println("退出");
System.exit(0);
break;
}
}
}
}
```

3.3 完成登录操作 首先要新建一个实体类
Users
```java
package com.shool.entity;
import java.util.Objects;
/**
●
@version 1.0
●
@Author yishu
●
@Date 2024-12-24 11:08
●
@注释
*/
public class Users {
private String uname;
private String upwd;
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getUpwd() {
return upwd;
}
public void setUpwd(String upwd) {
this.upwd = upwd;
}
public Users() {
}
public Users(String uname, String upwd) {
this.uname = uname;
this.upwd = upwd;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Users users = (Users) o;
return Objects.equals(uname, users.uname) && Objects.equals(upwd, users.upwd);
}
@Override
public int hashCode() {
return Objects.hash(uname, upwd);
}
@Override
public String toString() {
return "Users{" +
", uname='" + uname + '\'' +
", upwd='" + upwd + '\'' +
'}';
}
}
```
3.4 完成登录操作

新建一个UsersDao 新建一个ArrayList集合 用来存储 users
总结
通过本教程,您了解了 Maven 的基本概念、功能以及如何在 Java 项目中使用它来进行依赖管理、构建和生命周期管理。同时,学习了 Java 集合 的优势以及在实际项目中如何使用集合来进行数据存储和操作。
转载请注明:【Java 篇】Maven 的神奇魔法与集合的奇妙世界:在 Java 编程领域中探索代码的奥秘之旅 | 胖虎的工具箱-编程导航