文章目录
- Maven解决依赖管理与项目构建痛点
- 构建流程
- Maven的打包功能
- [Java + Maven 实现QQ邮箱群发功能](#Java + Maven 实现QQ邮箱群发功能)
Maven解决依赖管理与项目构建痛点
Maven 解决了 Java 开发的两个核心问题:依赖繁琐 和构建混乱。
手动管理:
- 需自行查找下载 Jar 包及其依赖
- 手动配置编译路径
- 版本冲突、协作困难
Maven 方案:
pom.xml声明依赖 → 自动下载管理- 标准项目结构 → 编译、测试、打包一键完成
本质:Maven 用自动化取代手工,让开发者聚焦于代码。
构建流程
一、3个核心概念
Maven构建过程的三个核心概念:
| 概念 | 是什么 | 核心规则 |
|---|---|---|
| 生命周期 | 一套预设的完整流程 (如构建、清理) | 相互独立,如 clean 和 default |
| 阶段 | 流程中的具体步骤 (如编译、打包) | 有序且自动递进 执行后阶段会自动运行所有前序阶段 |
| 目标 | 插件提供的具体任务 (真正执行操作的代码) | 阶段必须绑定目标才有实际作用 |
关系总结:
- 你命令执行 的是一个阶段 (如
mvn package) - 该阶段所属的生命周期被触发
- Maven自动执行该阶段之前的所有阶段
- 每个阶段通过调用绑定的插件目标来完成实际工作

二、核心原理
Maven构建的底层逻辑是「约定优于配置」:
如何理解"执行后序Phase会自动跑前置步骤"?
我们以 default(构建)生命周期为例,它包含以下核心阶段,并按固定顺序排列:
validate → compile → test → package → install → deploy
关键机制:每个阶段都隐式依赖于它之前的所有阶段。
实际演示:
当你在项目根目录执行命令:
bash
mvn package
Maven并不会只执行 package 这一个阶段,而是会从生命周期起点开始,按顺序执行直到 package 为止的所有阶段
执行 mvn package 时实际发生的完整流程:
- validate (验证项目结构)
- compile (编译源代码)
- test (运行单元测试)
- package (打包成JAR/WAR)
这就是Maven的自动递进执行逻辑:你只需要"告诉"Maven你最终想要到达哪个阶段,它就会自动完成所有必要的准备工作,确保构建过程的完整性和正确性。
三、新手必背命令
mvn clean:仅清理;mvn clean compile:清理+编译;mvn clean test:清理+编译+测试;mvn clean package:清理+编译+测试+打包(最常用)。
Maven的打包功能

Maven基础命令:clean与package
| 命令 | 作用 | 操作内容(以邮件群发项目为例) | 执行结果 |
|---|---|---|---|
mvn clean |
清理构建产物 | 删除 target/ 文件夹(旧.class、旧JAR包、测试报告等) |
项目回归"源码+配置"的干净状态 |
mvn package |
打包可运行文件 | 自动执行 compile → test → package,打包成 mail-send-1.0.0.jar |
生成可独立运行的 JAR 文件 |
mvn clean package |
重新打包 | 先执行 clean,再执行 package |
生成一个全新且无残留的 JAR 包 |
常用场景:
clean package:修改代码后、更新依赖后,确保生成全新 JARpackage:日常快速打包(旧包会被覆盖)
执行方式:
- IDEA :右侧Maven面板,双击
Lifecycle下的clean和package - 命令行 :在项目根目录执行
mvn clean package

Java + Maven 实现QQ邮箱群发功能

一、核心原理
邮件群发基于SMTP协议连接邮箱服务器,认证后批量发送邮件。
- Maven:自动引入JavaMail等依赖
- JavaMail:封装SMTP协议,提供发送邮件API
- QQ邮箱适配 :需开启SMTP服务并使用授权码(非登录密码)
二、开启QQ邮箱SMTP服务
QQ邮箱默认关闭SMTP,必须手动开启:
- 登录网页版QQ邮箱
- 进入「设置」→「账户」
- 找到「POP3/IMAP/SMTP服务」,开启「SMTP服务」
- 验证身份后,保存生成的16位授权码(用于程序连接)
搭建Maven项目
新建Maven项目,在pom.xml中引入JavaMail核心依赖(Maven自动下载,无需手动导包):
添加的依赖
<dependencies>
<!-- JavaMail API -->
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
</dependencies>
三、核心代码实现
新建Main.java类,完整代码如下(关键步骤都加了注释):
java
package linyuqin.maven;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
import java.util.Arrays;
import java.util.List;
/**
* 邮件群发工具类
*/
public class Main {
// 发件人邮箱(替换为自己的)
private static final String SENDER_EMAIL = "2268404687@qq.com";
// 发件人邮箱授权码(QQ邮箱需开启SMTP并生成授权码,不是登录密码)
private static final String SENDER_AUTH_CODE = "...";
// SMTP服务器(QQ邮箱:smtp.qq.com;163邮箱:smtp.163.com)
private static final String SMTP_HOST = "smtp.qq.com";
// SMTP端口(QQ邮箱:465;163邮箱:25/465)
private static final String SMTP_PORT = "465";
/**
* 邮件群发方法
* @param toEmails 收件人邮箱列表
* @param subject 邮件标题
* @param content 邮件内容(支持纯文本/HTML)
*/
public static void sendGroupMail(List<String> toEmails, String subject, String content) {
// 1. 配置SMTP参数
Properties props = new Properties();
props.put("mail.smtp.host", SMTP_HOST);
props.put("mail.smtp.port", SMTP_PORT);
props.put("mail.smtp.auth", "true"); // 开启认证
props.put("mail.smtp.ssl.enable", "true"); // QQ邮箱需开启SSL
// 2. 创建认证对象
Authenticator auth = new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(SENDER_EMAIL, SENDER_AUTH_CODE);
}
};
// 3. 获取Session对象
Session session = Session.getInstance(props, auth);
session.setDebug(true); // 开启调试模式,控制台可看发送日志S
try {
// 4. 发送邮件(循环发送,避免单封邮件包含过多收件人被判定为垃圾邮件)
for (String toEmail : toEmails) {
// 创建邮件消息
MimeMessage message = new MimeMessage(session);
// 设置发件人
message.setFrom(new InternetAddress(SENDER_EMAIL));
// 设置收件人
message.setRecipient(Message.RecipientType.TO, new InternetAddress(toEmail));
// 设置邮件标题
message.setSubject(subject, "UTF-8");
// 设置邮件内容(第二个参数为true表示HTML内容,false为纯文本)
message.setContent(content, "text/html;charset=UTF-8");
// 设置发送时间
message.setSentDate(new java.util.Date());
Transport.send(message);
System.out.println("邮件已发送至:" + toEmail);
}
} catch (MessagingException e) {
e.printStackTrace();
System.out.println("邮件发送失败:" + e.getMessage());
}
}
// 测试方法
public static void main(String[] args) {
// 收件人列表(替换为实际收件人)
List<String> toEmails = Arrays.asList(
"2268404687@qq.com"
);
// 邮件标题
String subject = "【测试】Maven+Java邮件群发";
// 邮件内容(支持HTML)
String content = "<h3>你好!</h3><p>这是一封通过Java+Maven发送的群发测试邮件</p>";
// 执行群发
Main.sendGroupMail(toEmails, subject, content);
}
}
四、运行测试
-
替换代码中的
SENDER_EMAIL(自己的QQ邮箱)和SENDER_AUTH_CODE(生成的授权码); -
IDEA中点击「运行」按钮,或执行Maven命令:
bash# 编译代码 mvn clean compile # 运行主类 mvn exec:java -Dexec.mainClass="linyuqin.maven.Main" -
控制台打印「邮件已成功发送至:xxx@qq.com」,且收件箱收到邮件,说明成功!