Maven教学--上

news/2024/9/22 20:29:31/

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 {@Testpublic 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 {@Testpublic 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)

    <!--解读:modelVersion1. 描述这个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 /导入jar3. 引入的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 repositorythat| this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs areused| for inheritance and direct lookup purposes, and must be unique across the set ofmirrors.|<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.ppmy.cn/news/348043.html

相关文章

如何进行JMeter分布式压测?一个案例教你详细解读!

目录 引言 一、什么是压力测试&#xff1f; 二、什么是分布式测试&#xff1f; 三、为什么要使用分布式压力测试&#xff1f; 四、主流压力测试工具对比 五、Jmeter分布式压测原理 六、Jmeter分布式压测前的准备工作 七、阿里云服务器上进行分布式压测 八、系统架构学…

Flutter使用Scheme方式App内或浏览器打开另一个App

pubspec.yaml文件新增依赖 dependencies:url_launcher: ^6.1.11await launchUrlString("flutterScheme://");//打开首页 await launchUrlString("flutterScheme://detail");//打开指定页面 await launchUrlString("flutterScheme://detail?namexxxx…

复习之linux系统中的软件管理

一、linux系统中软件包 1.软件包的类型 "注意在rhel8中只能使用绿色软件,源码编译软件和rpm软件" 类型支持的条件DEBUBlinux DEBlinux&#xff08;用不了&#xff09;RPM#redhat centOS fadorabz2|gz|xz#1.需要源码安装需要编译 #2.绿色软件,直接可用 #ntfs-3g_nt…

单片机 LCD1602液晶显示

proteus 8 kile5 代码&#xff1a; #include<reg51.h> #define uint unsigned int #define uchar unsigned char sbit RSP3^5; sbit RWP3^6; sbit EP3^7; uchar code k4[]{"welcome"}; uchar code k5[]{"to china!"}; void det() {uint i,j;for(i…

1602液晶显示实验

一、实验要求 参考书中例7.2.2的相关代码&#xff0c;实现第一行从右侧移入“Hello everyone&#xff01;”&#xff0c;同时第二行从右侧移入“Welcome to here&#xff01;”&#xff0c;完全移入后再完全移出屏幕&#xff0c;如此反复&#xff0c;实现滚动的效果。保存相关…

单片机1602液晶显示

基于单片机STC12C5A60S2芯片的1602液晶显示&#xff0c;跳线按照要求连接 附上主程序 #include "stc12c5a60s2.h" #include "intrins.h" #include "onewire.h"#define uchar unsigned char #define uint unsigned intuchar table[]{0,1,2,3,4,…

lvgl -03按钮 gui实现

static void btn_event_cb(lv_event_t * e) //事件处理函数 {lv_event_code_t code lv_event_get_code(e);lv_obj_t * btn lv_event_get_target(e);if(code LV_EVENT_CLICKED) {static uint8_t cnt 0;cnt;/*Get the first child of the button which is the label and cha…

液晶显示模块制作生产流程

液晶显示模块身边到处可见&#xff0c;比如固定电话机&#xff0c;比如手机&#xff0c;现在的智能家居&#xff0c;显示时代在不断上升&#xff0c;那液晶显示屏制作生产流程需要经过哪几道工序呢&#xff0c;下面就让小优来为大家介绍一下清达光电的液晶显示屏制作流程: 1.LC…