首页 > 编程语言 >6- 【JavaWeb】Maven管理项目

6- 【JavaWeb】Maven管理项目

时间:2024-09-12 12:50:34浏览次数:14  
标签:依赖 JavaWeb 项目 Maven pom test 打包

Apache Maven 是一个流行的构建自动化工具,用于 Java 项目的构建、管理和依赖处理。Maven 使用 XML 配置文件 pom.xml 来管理项目的构建过程和依赖关系。

1. 项目结构

一个标准的 Maven 项目结构如下:

my-maven-project/
├── src/
│   ├── main/
│   │   ├── java/                   # Java 源代码
│   │   ├── resources/              # 资源文件,如配置文件
│   ├── test/
│   │   ├── java/                   # 测试代码
│   │   ├── resources/              # 测试资源文件
├── target/                         # 编译生成的文件(自动生成)
├── pom.xml                         # Maven 项目配置文件
  • src/main/java:存放项目的 Java 源代码。
  • src/main/resources:存放项目的资源文件,如配置文件。
  • src/test/java:存放测试代码。
  • src/test/resources:存放测试资源文件。
  • target:存放编译和打包生成的文件(自动生成)。

2. 依赖导入

在 Maven 中,依赖通过 pom.xml 文件中的 <dependencies> 元素进行管理。以下是如何添加一个依赖的示例:

<dependencies>
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>31.1-jre</version>
    </dependency>
</dependencies>
  • groupId:依赖的组 ID。
  • artifactId:依赖的项目 ID。
  • version:依赖的版本号。

3. 依赖作用域

Maven 允许为依赖设置不同的作用域,影响它们在编译、测试和运行时的可见性。

  • compile(默认):编译、测试和运行时都可用。
  • test:仅在测试时可用。
  • provided:编译和测试时可用,但不包括在最终打包中(通常用于 Servlet API 等容器提供的库)。
  • runtime:运行时可用,但编译时不可用。
  • system:需要显式提供系统范围的 JAR 文件(不推荐)。
<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
        <scope>test</scope>
    </dependency>
</dependencies>

4. 可选依赖

可选依赖是指不是强制要求的依赖,仅在某些条件下需要。通过 <optional> 元素来标记:

<dependencies>
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>optional-dependency</artifactId>
        <version>1.0</version>
        <optional>true</optional>
    </dependency>
</dependencies>

5. 排除依赖

在有些情况下,你可能需要排除传递性依赖(即依赖的依赖)。可以通过 <exclusions> 元素排除不需要的依赖:

<dependencies>
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>example-dependency</artifactId>
        <version>1.0</version>
        <exclusions>
            <exclusion>
                <groupId>org.unwanted</groupId>
                <artifactId>unwanted-library</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

6. 继承关系

Maven 支持项目继承,使得子项目可以继承父项目的配置。在 pom.xml 中通过 <parent> 元素指定父项目。

pom.xml 示例:

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>parent-project</artifactId>
    <version>1.0</version>
    <packaging>pom</packaging>

    <dependencyManagement>
        <dependencies>
            <!-- 父项目中的依赖版本管理 -->
            <dependency>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
                <version>31.1-jre</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

pom.xml 示例:

<project>
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.example</groupId>
        <artifactId>parent-project</artifactId>
        <version>1.0</version>
    </parent>

    <artifactId>child-project</artifactId>

    <dependencies>
        <!-- 子项目中的依赖 -->
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
        </dependency>
    </dependencies>
</project>

7. 常用命令

  • 编译项目

    mvn compile
    
  • 运行测试

    mvn test
    
  • 打包项目

    mvn package
    
  • 安装到本地仓库

    mvn install
    
  • 清理目标目录

    mvn clean
    
  • 生成项目文档

    mvn site
    

8. 测试项目

Maven 使用 src/test/java 目录来存放测试代码。你可以通过 JUnit 或 TestNG 等框架编写测试用例。

示例测试类:

import org.junit.Assert;
import org.junit.Test;

public class MyServiceTest {

    @Test
    public void testPerformAction() {
        MyService service = new MyService();
        String result = service.performAction();
        Assert.assertEquals("Expected result", result);
    }
}

使用 Maven 运行测试:

mvn test

9. 打包项目

Maven 默认将项目打包成 JAR 文件。如果你想生成其他类型的包(如 WAR 文件),需要在 pom.xml 中配置 packaging 元素。

打包为 JAR 文件:

<packaging>jar</packaging>

打包为 WAR 文件:

<packaging>war</packaging>

运行打包命令:

mvn package

生成的文件通常会放在 target 目录下。


总结

  • 项目结构:Maven 项目有标准的目录结构,包括 src/main/javasrc/test/javatarget
  • 依赖管理:通过 pom.xml 管理项目依赖,包括依赖导入、作用域、可选依赖、排除依赖等。
  • 继承关系:支持项目继承,父项目可以提供共享的配置和依赖。
  • 常用命令:包括编译、测试、打包、安装等操作。
  • 测试项目:使用 Maven 和 JUnit 进行单元测试。
  • 打包项目:通过 Maven 打包项目为 JAR 或 WAR 文件。

通过 Maven,你可以有效地管理项目依赖、构建过程和项目结构,提高开发效率。

标签:依赖,JavaWeb,项目,Maven,pom,test,打包
From: https://blog.csdn.net/weixin_44329069/article/details/142140671

相关文章

  • 3-【JavaWeb】Lombok配置及使用方法介绍
    Lombok入门教程1.什么是Lombok?Lombok是一个帮助简化Java类中样板代码的Java库。比如,你经常会发现自己重复编写getter和setter方法、构造函数、toString()、equals()和hashCode()方法等。Lombok通过注解来自动生成这些代码,简化开发工作。2.Lombok安装步......
  • 【项目实战】NIO 与 直接内存 (Direct Memory),由JVM直接管理,而不是通过垃圾回收器来管
    一、技术概览1.1定义直接内存,DirectMemory。直接内存,是指位于Java堆外的一块内存区域。直接内存,由JVM直接管理,而不是通过垃圾回收器来管理。直接内存,可以通过Java的ByteBuffer.allocateDirect()方法创建。直接内存,可以提高数据传输效率,特别是当数据需要频繁地在网络......
  • 【项目实战】Redis使用场景之基于Redis实现分布式队列
    一、什么是分布式队列分布式队列,指在分布式系统中用于协调不同服务或组件之间的消息传递和任务调度的队列。分布式队列,允许多个生产者将任务放入队列,而多个消费者可以从队列中取出任务进行处理。分布式队列,在微服务架构、任务调度、消息传递等场景中非常有用。二、为什......
  • 个人项目
    这个作业属于哪个课程22计科12班作业要求作业github链接Github作业目标设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率需求分析题目:论文查重描述如下:设计一个论文查重算法,给出一个原文......
  • 基于 Bootstrap+Echarts +Java SpringBoot 实现数字化水资源监测全景驾驶舱项目
    基于Bootstrap+Echarts+JavaSpringBoot实现数字化水资源监测全景驾驶舱项目,此项目前端采用Bootstrap前端框架,结合javaScrip和echarts以及ajax实现前端页面的展现与后端数据进行交互。后端采用JavaSpringBoot开发后台功能,对数据库增加增删改查等操作,给前端提供数据接口。......
  • WinForm项目结构详解及实例代码
    WinForm(WindowsForms)是基于.NETFramework平台的客户端(PC软件)开发技术,它允许开发者使用C#等语言创建丰富的图形用户界面(GUI)应用程序。本文将详细介绍WinForm项目的基本结构,并提供一个简单的登录系统实例代码,帮助读者更好地理解和应用WinForm技术。一、WinForm项目结构1.总体结构......
  • 企业通用人工智能项目应该规划失败——这没问题
    您的组织应该为构建生成式AI助手的“失败”做好准备。由ChatGPT-3.5在2022年11月推出所引发的生成式AI革命,让各大企业纷纷行动起来,试图利用这一新兴技术。然而,构建和维护一个高质量的生成式AI助手,带来了与标准企业技术建设截然不同的挑战。随着ChatGPT-3.5推出即将迎来两周年......
  • 信息化项目工作总结报告模板(第1章附目录)
    1项目概述1.1项目来源项目建设单位:市自然资源局;项目名称:X市土地二级市场网上交易系统建设项目;项目金额:XXX元;项目资金来源:政府财政资金。1.2建设目标按照“共建共治共享”的基本原则和“统筹规划、分步实施、业务属地管理、系统持续运营”的基本思路,结合X市土地二级市......
  • Maven更换阿里云源
    亲测可用<?xmlversion="1.0"encoding="UTF-8"?><!--LicensedtotheApacheSoftwareFoundation(ASF)underoneormorecontributorlicenseagreements.SeetheNOTICEfiledistributedwiththisworkforadditionalinformationre......
  • 2024年9月数据治理/项目管理/产品管理等优质内训
    在瞬息万变、竞争激烈的市场里,企业为求繁盛,宜内外寻觅资深导师,开展学习与培训。简而言之,内训是企业成长的必经之路。 数据治理 数据管理基础数据处理伦理数据治理数据架构数据建模和设计数据安全数据集成和互操作文件和内容管理参考数据和主数据数据仓库和商务智能元数据管理数据......