【Maven教程与实战案例】

news2025/3/13 23:07:42

文章目录

  • 前言
  • 一、Maven是什么?
  • 二、Maven的安装与配置
    • 1. 安装前置条件
    • 2. 下载与配置 Maven
    • 3. 验证安装
  • 三、Maven的核心概念
    • 1. POM.xml 文件
    • 2. 构建生命周期与插件机制
  • 四、实战项目示例
    • 1. 项目目录结构
    • 2. 编写代码
      • App.java
      • AppTest.java
    • 3. 构建项目
    • 4. 运行项目


前言

随着 Java 项目的日益增多,如何高效地管理项目依赖、构建过程以及版本控制成为开发中的重要课题。Apache Maven 作为目前流行的项目管理工具,提供了一整套标准化的项目构建流程和依赖管理方案。


一、Maven是什么?

Maven 是 Apache 软件基金会提供的一款开源项目管理工具,其核心目标是使项目构建、依赖管理和发布流程自动化、标准化。其主要特点包括:

  • 依赖管理:通过 POM(Project Object Model)文件来管理项目所需的依赖库,Maven 会自动下载和更新这些依赖包。
  • 构建管理:内置了一套标准化的构建生命周期(如 clean、compile、test、package、install、deploy 等),极大简化了编译、测试、打包等过程。
  • 统一项目结构:Maven 推荐统一的目录结构,有助于项目的代码管理和团队协作。

二、Maven的安装与配置

在使用 Maven 之前,需确保系统中已安装 JDK,并配置好 JAVA_HOME 环境变量。以下是安装和配置 Maven 的基本步骤:

1. 安装前置条件

  • JDK 安装:下载并安装 JDK,建议使用 JDK 8 或更高版本。
  • 配置 JAVA_HOME:设置 JAVA_HOME 环境变量,指向 JDK 的安装目录。

2. 下载与配置 Maven

  1. 前往 Apache Maven 官网下载最新版本(例如 apache-maven-3.8.6)。
  2. 解压下载的压缩包到合适的目录,并设置 MAVEN_HOME 环境变量指向该目录。
  3. MAVEN_HOME/bin 添加到系统 PATH 环境变量中。

3. 验证安装

在终端中执行以下命令:

mvn -v

示例输出:

Apache Maven 3.8.6
Maven home: /path/to/apache-maven-3.8.6
Java version: 1.8.0_281, vendor: Oracle Corporation

三、Maven的核心概念

1. POM.xml 文件

POM(Project Object Model)文件是 Maven 项目的核心配置文件,记录了项目的基本信息、依赖管理、插件配置等。

<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.example</groupId>
    <artifactId>maven-demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <dependencies>
        <!-- 示例:添加 JUnit 依赖用于测试 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

说明

  • groupId:标识项目所属的组织或包名。
  • artifactId:项目名称。
  • version:项目当前版本。
  • dependencies:定义了项目所依赖的库,Maven 会自动下载这些依赖。

2. 构建生命周期与插件机制

Maven 定义了一套标准化的构建生命周期,主要阶段包括:

  • clean:清除上一次构建生成的文件。
  • compile:编译项目源码。
  • test:运行单元测试。
  • package:将编译后的代码打包成 JAR 或 WAR 文件。
  • install:将生成的包安装到本地 Maven 仓库,供其他项目使用。
  • deploy:将包发布到远程仓库。

Maven 通过插件扩展构建功能,例如:

  • maven-compiler-plugin:用于编译 Java 代码。
  • maven-surefire-plugin:用于执行测试用例。

四、实战项目示例

1. 项目目录结构

Maven 项目目录结构如下:

maven-demo/
 ├── pom.xml
 └── src/
     ├── main/
     │   └── java/
     │       └── com/
     │           └── example/
     │               └── App.java
     └── test/
         └── java/
             └── com/
                 └── example/
                     └── AppTest.java

2. 编写代码

App.java

创建位于 src/main/java/com/example/ 目录下的 App.java 文件:

package com.example;

public class App {
    public static void main(String[] args) {
        System.out.println("Hello, Maven!");
    }
}

AppTest.java

创建位于 src/test/java/com/example/ 目录下的 AppTest.java 文件:

package com.example;

import org.junit.Test;
import static org.junit.Assert.*;

public class AppTest {
    @Test
    public void testApp() {
        // 简单的断言示例,确保测试框架能正常工作
        assertTrue(true);
    }
}

3. 构建项目

在项目根目录下执行以下命令进行编译、测试和打包:

mvn clean package

说明

  • clean 命令清理之前生成的编译文件。
  • package 命令会执行编译、测试并将项目打包成 JAR 文件。
    Maven 会根据 POM 文件中的依赖配置自动下载所需的库。

4. 运行项目

打包成功后,可以在 target 目录下找到生成的 JAR 文件。使用以下命令运行:

java -jar target/maven-demo-1.0-SNAPSHOT.jar

运行结果将显示:

Hello, Maven!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2314533.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图像识别技术与应用-YOLO

1 YOLO-V1 YOLO-V1它是经典的one-stage方法&#xff0c;You Only Look Once&#xff0c;名字就已经说明了一切&#xff01;把检测问题转化成回归问题&#xff0c;一个CNN就搞定了&#xff01;也可以对视频进行实时检测&#xff0c;应用领域非常广&#xff01; YOLO-V1诞生与2…

LLM推理和优化(1):基本概念介绍

一、LLM推理的核心过程&#xff1a;自回归生成 LLM&#xff08;如DeepSeek、ChatGPT、LLaMA系列等&#xff09;的推理本质是自回归生成&#xff1a;从初始输入&#xff08;如[CLS]或用户prompt&#xff09;开始&#xff0c;逐token预测下一个词&#xff0c;直到生成结束符&…

Kubernetes教程(七)了解集群、标签、Pod和Deployment

了解集群、标签、Pod和Deployment 一、K8s资源对象二、K8s集群1. Master2. Node 三、Namespace&#xff08;命名空间&#xff09;四、Label&#xff08;标签&#xff09;五、Pod1. 共享网络命名空间2. 共享数据 六、工作负载1. 设置副本数2. 应用升级 结语 Kubernetes的知识真的…

【最新】DeepSeek 实用集成工具有那些?

deepseek 系列github仓库地址 【主页】deepseek-aiDeepSeek-R1DeepSeek-V3DeepSeek-VL2【本文重点介绍】awesome-deepseek-integration 注意&#xff1a;以下内容来自awesome-deepseek-integration DeepSeek 实用集成&#xff08;awesome-deepseek-integration&#xff09; 将…

Flutter_学习记录_video_player、chewie 播放视频

1. video_player 视频播放 插件地址&#xff1a;https://pub.dev/packages/video_player 添加插件 导入头文件 import package:video_player/video_player.dart;Android配置&#xff08;iOS不用配置&#xff09; 修改这个文件&#xff1a;/android/app/src/main/AndroidMani…

【MySQL】增删改查进阶

目录 一、数据库约束 约束类型 NULL约束&#xff1a;非空约束 UNIQUE&#xff1a;唯一约束 DEFAULT&#xff1a;默认值约束 PRIMARY KEY&#xff1a;主键约束 FOREIGN KEY&#xff1a;外键约束 二、表的设计 三、新增 四、查询 聚合查询 聚合函数 GROUP BY子句 HA…

静态时序分析:SDC约束命令set_ideal_latency详解

相关阅读 静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm1001.2014.3001.5482 当使用set_ideal_network命令将当前设计中的一组端口或引脚标记为理想网络源后&#xff0c;理想属性会沿着组合逻辑进行传播&#xff0c;理想网络中的线网和单元…

达梦数据库查看字符集编码

select SF_GET_UNICODE_FLAG(); 返回 0 代表数据库字符集编码为 GB18030 1 代表数据库字符集编码为 UTF-8 2 代表数据库字符集编码为韩文字符集 EUC-KR

Pac-Man(吃豆人) 游戏

目录 前言 1. Pygame游戏开发基础 1.1 Pygame简介 1.2 游戏开发基本概念 1.3 Pygame核心模块介绍 2. 游戏设计与规划 2.1 游戏规则设计 2.2 游戏对象规划 2.3 技术方案选择 3. 创建游戏窗口与初始化 3.1 初始化Pygame环境 3.2 设置游戏窗口 3.3 定义颜色和游戏参数…

【Spring】@PostConstruct详解

在 Java 开发中&#xff0c;尤其是在基于 Spring 框架的项目里&#xff0c;我们常常会遇到需要在对象创建并完成依赖注入后&#xff0c;执行一些初始化操作的场景。PostConstruct注解正是为解决此类问题而诞生的&#xff0c;它为我们提供了一种便捷且优雅的方式来处理对象的初始…

OEM SQL Details and Session Details 5s 或者parallel 才会在sql monitor显示

从企业管理器 13.4 版本更新 10 (RU10) 开始&#xff0c;ASH Analytics 的 SQL 详细信息和会话详细信息深入屏幕已更新为使用 Oracle JET UI。 在 Ash Analytics 中&#xff0c;单击左下角区域中“热门 SQL”中的 SQL ID 即可深入了解 SQL 详细信息。 单击右下角“热门会话”区…

JSAR 基础 1.2.1 基础概念_空间小程序

JSAR 基础 1.2.1 基础概念_空间小程序 空间空间自由度可嵌入空间空间小程序 最新的技术进展表明&#xff0c;官网之前的文档准备废除了&#xff0c;基于xsml的开发将退出历史舞台&#xff0c;three.js和普通web结合的技术将成为主导。所以后续学习请移步three.js学习路径&#…

Spring Security的作用

一、概述 Spring Security是一个框架&#xff0c;提供认证&#xff08;authentication&#xff09;、授权&#xff08;authorization&#xff09;和保护&#xff0c;以抵御常见攻击。对 常见漏洞 的保护提供了全面的支持&#xff0c;它对保护命令式和响应式应用程序有一流的支…

数据结构与算法效率分析:时间复杂度与空间复杂度详解(C语言)

1. 算法效率 1.1 如何衡量一个算法的好坏&#xff1f; 在计算机程序设计中&#xff0c;衡量算法优劣的核心标准是效率。但效率不仅指运行速度&#xff0c;还需要综合以下因素&#xff1a; 时间因素&#xff1a;算法执行所需时间 空间因素&#xff1a;算法运行占用的内存空间…

数据类设计_图片类设计之4_规则类图形混合算法(前端架构)

前言 学的东西多了,要想办法用出来.C和C是偏向底层的语言,直接与数据打交道.尝试做一些和数据方面相关的内容 引入 接续上一篇,讨论图片类型设计出来后在场景中如何表达,以及图片的混合算法.前面的内容属于铺垫和基础,这篇内容和实际联系起来了. 背景图和前景图 这里笔者想先…

从零使用docker并安装部署mysql8.3.0容器

在开始使用docker到完成mysql的安装部署&#xff0c;中间有很多的坑等着 安装docker并配置 sudo yum install docker-ce 启动docker并设置开机启动项 sudo systemctl start docker sudo systemctl enable docker查看docker是否启动 sudo systemctl status docker 或者直接…

cpu 多级缓存L1、L2、L3 与主存关系

现代 CPU 的多级缓存&#xff08;L1、L2、L3&#xff09;和主存&#xff08;DRAM&#xff09;构成了一个层次化的内存系统&#xff0c;旨在通过减少内存访问延迟和提高数据访问速度来优化计算性能。以下是对多级缓存和主存的详细解析&#xff1a; 1. 缓存层次结构 现代 CPU 通…

基于Python+SQLite实现校园信息化统计平台

一、项目基本情况 概述 本项目以清华大学为预期用户&#xff0c;作为校内信息化统计平台进行服务&#xff0c;建立网页端和移动端校内信息化统计平台&#xff0c;基于Project_1的需求实现。 本项目能够满足校内学生团体的几类统计需求&#xff0c;如活动报名、实验室招募、多…

[多线程]基于阻塞队列(Blocking Queue)的生产消费者模型的实现

标题&#xff1a;[多线程]基于阻塞队列(Blocking Queue)的生产消费者模型的实现 水墨不写bug 文章目录 一、生产者消费者模型特点&#xff1a;二、实现2.1详细解释1. 成员变量2. 构造函数3. Isfull 和 Isempty4. Push 函数5. Pop 函数6. 析构函数7. GetSize 函数 三、总结与多线…

vue组件库el-menu导航菜单设置index,地址不会变更的问题

请先确认 1.路由已配置好 route-index.js如下&#xff0c; 2.view-ProHome.vue中已预留路由展示位 3.导航菜单复制组件库&#xff0c;并做修改 其中index与路由配置的地址一致 运行后发现点击菜单&#xff0c;url地址还是不变&#xff0c;查看组件库 Element - The worlds …