maven入门与核心功能介绍

🚗🚗🚗🚗🚗🚗🚗 数据结构专栏🚗🚗🚗🚗🚗🚗🚗🚗🚗🚗

🛹🛹🛹🛹🛹🛹🛹小知识总结分享🛹🛹🛹🛹🛹🛹🛹🛹🛹🛹

🚀🚀🚀🚀🚀🚀🚀题目历练场🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀

🚢🚢🚢🚢🚢🚢🚢功能包与集合类介绍🚢🚢🚢🚢🚢🚢🚢🚢🚢

🛞🛞🛞🛞🛞🛞🛞java EE🛞🛞🛞🛞🛞🛞🛞🛞🛞🛞🛞🛞🛞

文章目录


引言

  • 今天给大家介绍一下maven和一些相关的操作,博客还是要手搓的,希望对大家有帮助.
  • 我的导图

一、什么是maven

  • Maven 就是一个Java 项目的 "大管家 + 自动下载工具"。

它到底是干嘛的?

  • 以前写 Java 项目:要用很多第三方包(比如连接数据库、操作 Excel、发请求等)
    咱们得自己去官网一个个下载 jar 包还要手动放到项目里版本不对、包冲突、少依赖,项目直接跑不起来,反正会有很多问题.
  • Maven 就在配置文件里写一句要什么包、什么版本,它就:
    自动去网上下载所有需要的 jar 包
    自动管理依赖(A 包需要 B 包,它会一起下)
    统一管理项目结构(src 放代码,target 放编译结果)
    一键编译、打包、运行、发布,不用你手动点来点去

基本架构

  • 项目配置文件:pom.xml .里面写:项目名、版本、依赖哪些 jar、用什么插件
  • 在配置好第三方文件后,maven会自动的去仓库中寻找并加载到当前项目中,如果本地仓库没有就是按照(远程仓库 ---> 中央仓库)的优先级进行下载到本地仓库.
  • 处理配置文件 ,maven还引入了声明周期与插件.我们要先知道这些生命周期是考插件驱动的,后面会详细说生命周期~

二、坐标

上面咱们说了,通过maven可以自动通过仓库下载第三方依赖,这么多第三方依赖,是怎么确定哪一个的呢?

maven不仅可以快速加载配置好第三方依赖,还可以管理项目,其中就是设计了标签,这便签就是一个gps,添加几个特征就可以定义到唯一的一个第三方依赖.

  • 坐标是资源的唯一标识,通过该坐标可以唯一定位资源位置
  • 依赖语法:
xml 复制代码
<dependencies>  <-- 依赖 !-- >
<-- 某一具体依赖 !-- >
 <dependency>
     <groupId>组织名</groupId>
     <artifactId>项目名</artifactId>
     <version>版本号</version>
 </dependency>

<-- 某一具体依赖 !-- >
 <dependency>
     <groupId>组织名</groupId>
     <artifactId>项目名</artifactId>
     <version>版本号</version>
 </dependency>


....
</dependencies>
 

三、配置依赖

配置依赖与删除依赖

上面我们介绍了依赖是通过坐标进行配置的,但是我们配置的依赖是有依赖性的,什么意思呢,打比方我配置的是一个蛋糕 ,但是蛋糕上还有草莓,巧克力...一些其他的也会跟着一起配置下来.

一般来说,这是没有啥问题的,但是想要移除应该怎么移除呢?可以通过exclusion 标签进行移除

xml 复制代码
<dependency>
    <groupId>你要引的包A</groupId>
    <artifactId>xxx</artifactId>
    <version>xxx</version>

    <!-- 排除里面的某个依赖 -->
    <exclusions>
        <exclusion>
            <groupId>要排除的包B</groupId>
            <artifactId>要排除的包B</artifactId>
            <!-- 注意:exclusion 不用写 version -->
        </exclusion>
    </exclusions>
</dependency>

四、 生命周期

啥是声明周期? 怎么可以理解成Maven 给 Java 项目定好的一套固定 "流水线"。从 "清理旧文件"→"写代码"→"编译"→"测试"→"打包"→"安装到本地"→"发布到服务器",一步接一步,按顺序走。

3套周期

重点了解:

  • clean : 移除上一次构建生成的文件 ----->
  • compile : 编译项目源代码 ----->
  • test : 使用合适的单元框架进行测试 ---->
  • package : 将编译后的文件打包 --->
  • install : 安装项目到本地仓库
    注意: 在同一个生命周期中,位于后面的操作需要依赖前面的操作,也就是也会执行前面的操作

五、单元测试

单元测试与Junit

先main方法中进行测试,当存在很多方法或者逻辑的时候其实我们是容易测试的,在maven中引入了单元测试.有啥特点呢?

  • 不启动整个项目、不连数据库、不点界面
  • 只测一个方法、一个小功能
  • 运行飞快,秒出结果:成功 / 失败

存在一款第三方依赖Junit最常用的单元测试框架,我们也是通过坐标引入

  • 依赖范围

    • 规定测试类、测试方法怎么写
    • 提供运行测试的能力
    • 提供一堆断言方法判断结果对不对

断言

其实就是junit下面的一系列的测试方法.

常用方法

java 复制代码
// 用户类
public class UserService {

    /**
     * 给定一个身份证号, 计算出该用户的年龄
     * @param idCard 身份证号
     */
    public Integer getAge(String idCard){
        if (idCard == null || idCard.length() != 18) {
            throw new IllegalArgumentException("无效的身份证号码");
        }
        String birthday = idCard.substring(6, 14);
        LocalDate parse = LocalDate.parse(birthday, DateTimeFormatter.ofPattern("yyyyMMdd"));
        return Period.between(parse, LocalDate.now()).getYears();
    }

    /**
     * 给定一个身份证号, 计算出该用户的性别
     * @param idCard 身份证号
     */
    public String getGender(String idCard){
        if (idCard == null || idCard.length() != 18) {
            throw new IllegalArgumentException("无效的身份证号码");
        }
        return Integer.parseInt(idCard.substring(16,17)) % 2 == 1 ? "男" : "女";
    }

}

下面在test包下通过断言生成测试方法

java 复制代码
   @Test
    public void testGenderWithAssert(){
        UserService userService = new UserService();
        String gender =userService.getGender("100000200001013418");

        //断言
        Assertions.assertEquals("男", gender , "性别计算错误");
    }

就是根据预测信息是不是相互适配,来返回相对性的提示信息,相比传统的还是更加模块的~

总结

这篇文章就先分享到这里了,希望对你有帮助~

  • 我是Dylan,下次见~
    -
相关推荐
懒鸟一枚22 分钟前
深入理解 Linux 内存、Swap 交换分区与分页机制的关系
java·linux·数据库
我命由我123452 小时前
执行 Gradle 指令报错,无法将“grep”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
考虑考虑2 小时前
Sentinel安装
java·后端·微服务
凤凰院凶涛QAQ4 小时前
《Java版数据结构 & 集合类剖析》栈与队列:“push/pop 是栈的灵魂,offer/poll 是队列的骨架——四组 API,两种人生”
java·开发语言·数据结构
掘金_答案4 小时前
上线那天,一个 ConcurrentHashMap 差点送走我的 AI 客服——3 天排查 JVM 血泪史
java·后端·架构
猿与禅5 小时前
CosId 分布式 ID 生成器完全教程:从架构原理到生产落地
java·shardingsphere·雪花算法·分布式id·高性能·cosid·号段模式
MindUp5 小时前
企业网盘权限模型解析:多层级访问控制与审计能力选型指南
java·linux·运维
NG4775 小时前
【软件设计与体系结构】-策略设计模式
java·设计模式·软件工程
程序员天天困6 小时前
优雅记录操作日志:从注解到 SpEL 的全链路实践与开源方案对比
java·后端
战血石LoveYY6 小时前
Integer类型超限,导致数据异常
java·算法