Maven教学--上

news2024/9/27 23:31:22

Maven教程–上

先看一个问题,引出Maven

需求说明/图解

  1. 编写一个类, 有一个方法sum,可以返回两个数的和
  2. 编写测试类TestSum, 可以测试sum 是否正确.

使用传统方式完成

  1. 创建传统的java 项目java-hello
    在这里插入图片描述

  2. 创建Hello.java

public class Hello {
    public String sum(int n1, int n2) {
        System.out.println("sum= " + (n1 + n2));
        return "sum= " + (n1 + n2);
    }
}
  1. 创建HelloTest.java
public class HelloTest {

    @Test
    public void testSum() {

        Hello hello = new Hello();
        String res = hello.sum(1, 9);

        //使用断言
        /**
         * 1.Assert 是一个断言类,(就是判断实际返回的值和期望值是否相同)
         * 2.如果res 和 "sum=10" 是相同的,则通过断言
         * 3.如果res 和 "sum=10" 是不相同的,则给出提示
         *
         */
        Assert.assertEquals("sum=10", res);
    }
}

传统方式问题/不足分析->Maven

  1. 包管理不方便,比如希望在项目增加对Mysql 数据库的操作, 怎么办?

在这里插入图片描述

  1. 如果希望将该项目打包成可以发布的jar , 怎么办?
  2. 如果项目很大,包越来越多,包出现版本冲突怎么办?
  3. 很多框架,比如spring5.x 需要使用jackson-2.9.x.jar 的包,处理json, 包的兼容性很烦人.
  4. 还有其他问题,比如项目很大,包括多个模块,模块有共有的jar, 怎么办? ===> 引出Maven

Maven 快速入门实例

需求说明/图解

  1. 编写一个类, 有一个方法sum,可以返回两个数的和
  2. 编写测试类TestSum, 可以测试sum 是否正确.

创建Maven 项目java-project-maven

在创建Maven 项目的过程中涉及到的groupid、ArtifactId、Version、项目组织结构,在常用工具专栏 maven作用讲解—以及怎么配置阿里的maven镜像]

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

创建\Hello.java

public class Hello {
    public String sum(int n1, int n2) {
        System.out.println("sum= " + (n1 + n2));
        return "sum= " + (n1 + n2);
    }
}

创建test测试类

\src\test\java\com\HelloTest.java , 注意这个文件是创建再src\test… 目录下的.

public class TestHello {
    @Test
    public void testSum() {

        Hello hello = new Hello();
        String res = hello.sum(10, 50);
        /**
         * 1.Assert 是一个断言类,(就是判断实际返回的值和期望值是否相同)
         * 2.如果res 和 "sum=10" 是相同的,则通过断言
         * 3.如果res 和 "sum=10" 是不相同的,则给出提示
         *
         */
        Assert.assertEquals("sum=60", res);

    }
}

修改pom.xml

pom.xml 文件(这个文件的作用就是引入项目依赖的jar)

    <!--
        解读:modelVersion
        1. 描述这个pom文件/pom模型遵循的哪个版本
        2. 对应maven2 和 maven3 而言, 这里的modelVersion只能是4.0.0
    -->
    <modelVersion>4.0.0</modelVersion>

    <!--
        解读: 下面是指定该项目的坐标, 是创建项目时,程序员指定
        1. groupId: 组织名
        2. artifactId: 项目名
        3. version: 版本
    -->
    <groupId>com.wyxedu</groupId>
    <artifactId>java-project-maven</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--
        解读
        1. 这里就是引入项目需要的jar包, 类似传统项目的import jar的作用
        2. 在 dependencies标签内, 可以指定多个需要依赖的jar /导入jar
        3. 引入的jar包需要一个完整的jar包坐标, 从mvn仓库查询得到
    -->
    <dependencies>
        <dependency>
            <!-- 依赖jar的 groupId : 组织名-->
            <groupId>junit</groupId>
            <!-- 依赖jar的 artifactId : 项目名-->
            <artifactId>junit</artifactId>
            <!-- 依赖jar的 version : 版本-->
            <version>4.12</version>
            <!-- 该jar包的作用范围, 这里就是说引入的junit包,作用范围在 src/test。。目录下,
                 关于scope后面我们还会详解.
             -->
            <scope>test</scope>
        </dependency>

在哪里看项目引入的jar 包?

在这里插入图片描述

在这里插入图片描述

完成测试

运行HelloTest.java

在这里插入图片描述

Maven 带来了哪些好处?

  1. 包管理更加方便,比如老师希望在项目增加对Mysql 数据库的操作, 怎么办?, 在pom.xml加入即可。

● 修改: pom.xml , 加入mysql 的依赖即可.

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3, 私服: 开发团队搭建的存储资源的仓库,可以个性化仓库(比如只供团队使用的jar), 同时提升下载速度

4, 我们个人开发时,可以直接从中央仓库下,如果想提升下载速度,可以设置镜像仓库, 这个我们在前面讲过.

坐标

作用: 资源的唯一标识,定位Maven 仓库中资源的位置

坐标构成

  1. groupld(组织id): 定义当前Maven 项目隶属组织名称(例如∶com.spring)

  2. artifactId(项目ID): 定义当前Maven 项目名称

  3. version(版本号): 定义当前项目版本号

  4. 如何获取jar 坐标

具体案例,比如mysql jar

在这里插入图片描述

坐标使用-开始入门

需求说明

  1. 请创建一个maven 项目maven-project-01
  2. 要求能够编程访问mysql 数据库,使用mysql 驱动8.0.27

代码+配置实现

  1. 创建maven 项目maven-project-01.
  2. 在pom.xml 文件中导入/引入mysql 8.0.27 jar 依赖即可
    <dependencies>
        <!-- 引入mysql依赖, 要求版本是8.0.27 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.27</version>
        </dependency>
    </dependencies>
  1. 观察项目jar 包情况, 一目了然

在这里插入图片描述

IDEA 集成自己安装的Maven

需求说明

在实际开发中,如果不想使用idea 自带的Maven, 可以通过配置进行切换

具体实现步骤

默认的maven 设置

在这里插入图片描述

重新设置Maven home directory , User setting file 和local reponsitory 即可

在这里插入图片描述

刷新maven, 同步本地仓库即可.

在这里插入图片描述

仓库配置

本地仓库配置

本地仓库概念, 前面老师讲过了

配置步骤

● 说明: 除了在idea 中指定仓库位置,也可以在配置文件settings.xml 来指定

  1. 应用场景:独立使用Maven ,老师这里就是给大家演示下使用, 如果在idea 指定了新的仓库位置,就不需在修改settings.xml 了
  2. 修改D:\program\apache-maven-3.6.3-bin\apache-maven-3.6.3\conf\settings.xml , 根据实际情况来, 为了测试, 可以再新建一个本地仓库目录
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
    <!-- localRepository
    | The path to the local repository maven will use to store artifacts.
    |
    | Default: ${user.home}/.m2/repository
    <localRepository>/path/to/local/repo</localRepository>
    -->
    <localRepository>D:\wyxedu_maven_reponsitory</localRepository>
  1. 注意细节: 路径的分割符号是\

如图配置

在这里插入图片描述

配置后,因为本地仓库变化, 而jar 包还没有下载, 就会爆红

在这里插入图片描述

更新Maven

在这里插入图片描述

观察新的本地仓库

在这里插入图片描述

远程仓库

远程仓库/中央仓库地址是规定好的, 不用修改

镜像仓库配置

1 镜像仓库:对远程仓库镜像(比如阿里云镜像仓库, 华为云镜像仓库)

2 配置镜像作用: 修改下载源,提升下载速度

3 阿里云镜像仓库地址: https://developer.aliyun.com/mvn/guide

在这里插入图片描述

配置步骤

  1. 修改D:\program\apache-maven-3.6.3-bin\apache-maven-3.6.3\conf\settings.xml
<mirrors>
    <!-- mirror
    | Specifies a repository mirror site to use instead of a given repository. The repository
    that
    | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are
    used
    | for inheritance and direct lookup purposes, and must be unique across the set of
    mirrors.
    |
    <mirror>
    <id>mirrorId</id>
    <mirrorOf>repositoryId</mirrorOf>
    <name>Human Readable Name for this Mirror.</name>
    <url>http://my.repository.com/repo/path</url>
    </mirror>
    -->
    <!--配置具体的仓库的下载镜像-->
    <mirror>
        <!--此镜像的唯一标识符,用来区分不同的mirror 元素-->
        <id>nexus-aliyun</id>
        <!-- 对哪种仓库进行镜像,简单说就是替代哪个仓库-->
        <mirrorOf>central</mirrorOf>
        <!-- 镜像名称-->
        <name>Nexus aliyun</name>
        <!--镜像URL -->
        <url>https://maven.aliyun.com/repository/central</url>
    </mirror>
</mirrors>

测试

看看下载jar 依赖速度是否快了, 结论:飞一般的速度(提示, 为了看效果,可以把下载好的jar 删除, 更新Maven, 重新下载jar 包, 体会下载速度…)

在这里插入图片描述

全局setting 和用户setting

  1. global settings: 本机器的配置,使用这台机器的所有用户都是用这个配置

  2. user settings: 当前用户的配置

  3. maven 安装路径下的conf 下的setting 属于全局配置

  4. IDEA 中, .m2/settings.xml 下属于用户配置(如图)

在这里插入图片描述

  1. 用户配置也可以指定,比如前面我们切换maven , 就重新指定了user setting.

在这里插入图片描述

  1. 在maven 运行的时候,用户配置会覆盖全局配置, 也就是用户配置优先级高.

注意事项和细节说明

  1. 给某个项目指定了新的maven , user setting 和local repository 只对当前这个项目生效

在这里插入图片描述

  1. 不会影响你以前创建的maven 项目
  2. 创建新的maven 项目时, 仍然是默认的maven, user setting 和local repository。

在这里插入图片描述

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

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

相关文章

【30天熟悉Go语言】5 Go 基本数据类型

文章目录 一、前言二、数据类型总览1、基本数据类型1&#xff09;数值型-整数类型1> 有符号整数类型&#xff1a;2> 无符号整数类型&#xff1a;3> 其他整数类型&#xff1a;4> PS:Go的整数类型&#xff0c;默认声明为int类型&#xff1a;5> 变量占用的字节数 2…

PowerShell系列(六):PowerShell脚本执行策略梳理

目录 1、执行策略等级 2、执行策略范围 3、执行策略命令语法格式 4、执行策略常用命令 PowerShell 是一种用于操作 系统的命令行界面&#xff0c;支持跨平台&#xff0c;它提供了许多功能来自动化和优化各种任务。PowerShell 是由微软官方开发的&#xff0c;并作为 Windows Ser…

教培行业的“智能GPT私教”?WorkPlusAI助理帮助教培机构实现十倍人效!

从横空出世到掀起高潮&#xff0c;当下&#xff0c;AIGC&#xff08;人工智能生成内容&#xff09;模式下的ChatGPT它正以惊人的速度席卷各个领域&#xff0c;在线教培行业也不例外。那么&#xff0c;正式进入落地期的ChatGPT&#xff0c;在在线教培行业有那些应用前景呢&#…

QT中信号和槽的概念

信号就是发生什么事件&#xff0c;槽就是触发什么函数&#xff0c;所以信号与槽就是发生什么事件(比如点击某个按钮)然后就会触发某个函数 connect(信号的发送者&#xff0c;发送的具体信号&#xff0c;信号的接受者&#xff0c;信号的处理&#xff09; connect(myButton , &a…

Android 内存泄漏

名词解释 内存泄漏:即memory leak。是指内存空间使用完毕后无法被释放的现象&#xff0c;虽然Java有垃圾回收机制&#xff08;GC&#xff09;&#xff0c;但是对于还保持着引用&#xff0c; 该内存不能再被分配使用&#xff0c;逻辑上却已经不会再用到的对象&#xff0c;垃圾回…

阿里P8整理的《亿级并发系统设计》实战教程,面面俱到,实在太全了

候&#xff0c;那系统架构一定不是那么简单的&#xff0c;用个 redis&#xff0c;用 mq 就能搞定&#xff1f;当然不是&#xff0c;真实的系统架构搭配上业务之后&#xff0c;会比这种简单的所谓“高并发架构”要复杂很多倍。 如果有面试官问你个问题说&#xff0c;如何设计一…

亚马逊、eBay新品期没有出单怎么办?自养买家号的重要性和技巧

一&#xff1a;新品期没有出单怎么办&#xff1f; 1.刚开始,低bid 调整&#xff0c;20元预算&#xff0c;让位置可以靠后点&#xff0c;因为前期跟前面比&#xff0c;比不赢&#xff0c;不如去后面比。 2.价格不是由卖家单一决定&#xff0c;而是由市场决定的。 3.切记自嗨型…

Kotlin Lambda表达式和匿名函数的组合简直太强了

Kotlin Lambda表达式和匿名函数的组合简直太强了 简介 首先&#xff0c;在 Kotlin 中&#xff0c;函数是“第一公民”&#xff08;First Class Citizen&#xff09;。因此&#xff0c;它们可以被分配为变量的值&#xff0c;作为其他函数的参数传递或者函数的返回值。同样&…

去中心化公链生态是否还有未来

2020年流动性挖矿带来的高收益让 DeFi Summer 点燃了2021年的大牛市。质押借贷、AMM作市、DEX、GameFi以及元宇宙等赛道的相继爆火&#xff0c;让整个行业看到了区块链的未来潜力&#xff0c;公链生态的繁荣也给项目带来了更多的可能性。而当市场进入熊市时&#xff0c;不少公链…

【netty基础】Java NIO三件套

文章目录 一. 缓冲区1&#xff0e;Buffer操作基本API2&#xff0e;Buffer的基本原理2.1. put操作2.2. get操作2.3. clear()回到初始化buffer的值 3&#xff0e;缓冲区的分配4&#xff0e;缓冲区分片5&#xff0e;只读缓冲区6. 直接(direct)缓冲区7. 内存映射 二. 选择器三. 通道…

直接插入排序--C语言(附详细代码)(附图详解)

目录 插入排序法的介绍 什么是插入排序法&#xff1f; 稳定性分析 插入排序基本思想 例子分析 实现代码 运行结果 插入排序法的介绍 什么是插入排序法&#xff1f; 插入排序&#xff0c;一般也被称为直接插入排序。对于少量元素的排序&#xff0c;它是一个有效的算法 。…

Django-3.2-LTS兼容哪些Python版本?支不支持Python3.9.10?

问&#xff1a;请问Python的3.9.10版本兼不兼容Django的3.2版&#xff1f; 答&#xff1a;Python 3.9.10 和 Django 3.2 之间是兼容的。Django 3.2 是一个长期支持&#xff08;LTS&#xff09;版本&#xff0c;它支持 Python 3.6、3.7、3.8 和 3.9。因此&#xff0c;Python 3.9…

母线差动保护(二)

3、大差和小差 接入大差元件的电流为I母、II母所有支路&#xff08;母联除外&#xff09;的电流&#xff0c;目的是为了判断故障是否为母线区内故障&#xff1b;接入小差元件的电流为接入该段母线的所有支路的电流&#xff0c;目的是为了判断故障具体发生在哪一条母线上。 以双…

ifconfig: RX packets 一直为 0

本博客的很多内容都是经验之谈&#xff0c;目的是给遇到类似问题的小伙伴提供一个解决问题的思路&#xff0c;如果试了不行&#xff0c;可以快速跳过&#xff0c;再寻找其他的解决方案。 如题目所言&#xff0c;今天遇到的问题是和网络连通性相关的&#xff0c;就是网络不通&a…

为什么企业推行OEE总是坚持不下去?

OEE很难推行吗&#xff1f; 企业追求高效率和减少浪费变得尤为重要&#xff0c;而在这个过程中&#xff0c;OEE&#xff08;Overall Equipment Efficiency&#xff09;成为了一个非常有用的工具&#xff0c;它可以为企业提供准确的数据&#xff0c;了解生产过程中存在的浪费程…

AttributeError: module ‘numpy‘ has no attribute ‘typeDict‘

问题描述&#xff1a;运行一个网上下载的PyQt5代码&#xff0c;出现了AttributeError: module numpy has no attribute typeDict的错误。具体如下&#xff1a; Traceback (most recent call last):File "F:/PyQt5/Javacr/main.py", line 16, in <module>from …

面向对象的介绍和内存

学习面向对象内容的三条主线 • Java 类及类的成员&#xff1a;&#xff08;重点&#xff09;属性、方法、构造器&#xff1b;&#xff08;熟悉&#xff09;代码块、内部类 • 面向对象的特征&#xff1a;封装、继承、多态、&#xff08;抽象&#xff09; • 其他关键字的使用…

3 个技巧,让你像技术专家一样解决编码问题

「我应该如何提高解决问题的能力&#xff1f;尽管我掌握了 JavaScript&#xff0c;却无法解决实际问题或理解复杂的 JavaScript 代码。」 经常有年轻的开发者朋友问我类似的问题。对开发者来说&#xff0c;解决问题非常重要。编写优秀的代码是一门创造性的艺术&#xff0c;而要…

Linux第二章之基本指令

目录 第一章、基本指令 01. ls 指令 02. pwd命令 03. cd 指令 04. touch指令 05.mkdir指令&#xff08;重要&#xff09; 06.rmdir指令 && rm 指令&#xff08;重要&#xff09; 07.man指令&#xff08;重要&#xff09; 08.cp指令&#xff08;重要&#xff0…

【性能测试系列】JMeter核心技术:分布式压测和参数化

JMeter分布式压测 为什么要做分布式部署? 在上一篇文章中&#xff0c;我们提到了JMeter的线程启动和运行&#xff0c;是会占用系统资源的&#xff0c;一旦需要大并发&#xff0c;而JMeter单机部署配置不够&#xff0c;将会导致JMeter无法在规定时间内启动对应的线程数&#x…