01_Maven

文章目录

  • Maven
    • 安装Maven
    • Maven的工作流程
    • 配置Maven
    • Maven的使用
      • module和project的关系
      • 如何用Maven导包
    • 如何用Maven进行项目构建
      • 指令介绍
      • clean指令
      • compile指令
      • package指令
      • install指令
    • Maven的依赖管理
      • 如何导包
      • scope作用域
      • 依赖传递
      • 依赖冲突
    • 使用Maven开发项目
    • Junit
      • 如何使用Junit

Maven

  • Maven是一个项目管理工具,主要有两个功能:
    • 项目构建
      • 指可以帮助我们编译项目打包项目(可以帮助我们把自己的项目打包成一个.jar文件)、安装项目、部署项目
    • 依赖管理
      • 当我们的项目变得复杂之后,项目中的依赖越来越多,管理起来也越来越复杂,Maven可以帮助我们去管理这些依赖。

安装Maven

版本说明

  • JDK:1.8
  • Maven:https://maven.apache.org/download.cgi(不要下最新版本)

解压

  • 证明安装成功 证明安装成功

配置环境变量

  • 打开高级系统设置,配置系统变量
    • 在这里插入图片描述
  • 配置环境变量
    • 在这里插入图片描述
      最后在cmd中输入mvn -v,查看当前版本

Maven的工作流程

传统写代码的问题

  1. jar包反复存储,占用空间
  2. 手动管理,容易混乱

Maven的工作流程图

在这里插入图片描述

  • 本地仓库:其实就是本地存放Jar包的一个路径,统一的集中式的去管理本地的所有jar包
  • 中央仓库:中央仓库其实就是Maven 提供的一个仓库,里面收录了世界上所有的开源的jar包,但是在国外,网速慢。
  • 镜像仓库:阿里等公司会去定期同步中央仓库,把中央仓库的内容同步过来。这样我们后续在下载jar包的时候,就可以让他指定去镜像仓库下载,这样下载的速度就会比较快。

配置Maven

  • 配置settings.xml
    • conf文件里
    • 配置本地仓库的路径
      在这里插入图片描述
    • 配置镜像仓库
      在这里插入图片描述
    • 配置JDK的编译版本
      在这里插入图片描述

源码

<settings>...<mirrors><mirror><id>nexus-aliyun</id><mirrorOf>central</mirrorOf><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public</url></mirror></mirrors>...</settings>-------------------------------------------------------------------------------------<settings>...<profiles><profile><id>jdk-1.8</id><activation><activeByDefault>true</activeByDefault><jdk>1.8</jdk></activation><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion></properties></profile></profiles>...
</settings>
  • 配置idea
    • 在Settings中搜索Maven
      在这里插入图片描述
    • Other Settings —> Settings for New Projects —> Maven
      在这里插入图片描述

Maven的使用

Maven工程的要求:

  1. 在项目的根路径下,有一个pom.xml文件

  2. 工程目录是如下的结构:

  • ProjectName

    • src(src里面不直接写包)
      • main
        • java(写代码的地方,指源代码的路径)
        • resources(配置文件地方,指配置文件的路径)
      • test
        • java(单元测试代码,指测试类的存放路径)
        • resources(单元测试的配置文件,指测试类需要用到的文件)
  • pom.xml(在项目的根目录下)

eg:
在这里插入图片描述


怎么把一个项目转换成maven项目

  1. src里面建几个包
    • src/main/java
      • mark as sources
    • src/main/resources
      • mark as resources
    • src/test/java
    • src/test/resources
  2. 创建一个pom.xml
  3. 对着pom.xml点击add as maven project

怎么通过idea创建一个Maven项目

在这里插入图片描述

  • GroupId:指公司名、组织名
    • eg:com.coo1heisenberg
  • ArtifactId:项目名
    • eg:test_maven

module和project的关系

  • project

    一个项目是IDEA开发工作的顶级组织单位。在其完成的形式中,一个项目可能代表一个完整的软件解决方案
    项目是以下内容的集合:

    • 工作成果:源代码、脚本、配置文件、文档、包等。
    • 用于开发、编译、运行和测试代码的SDK和库。
    • 在项目上下文中表示你的工作偏好设置
      • 一个项目有一个或者多个模块作为其部件
  • module

    • 模块是项目的一部分,你可以独立的编译、运行、测试和调试。
    • 模块是一种在维护公共项目配置的同事降低大型项目复杂性的方法。
    • 模块可以重复使用:如果需要,可以再多个项目中包含一个模块。

如何用Maven导包

  1. 打开https://mvnrepository.com/。搜索要用的包,找到指定的版本
  2. 拷贝坐标
    • groupIdartifactIdversion 叫做坐标,可以唯一确定一个包
  3. 只需要在 pom.xml文件中声明jar包的坐标就可以了,添加了之后点击 import changes

eg:
在这里插入图片描述


如何用Maven进行项目构建

指令介绍

项目构建其实就是 Maven可以帮助我们去检查项目,编译项目,测试项目,打包项目,安装项目,部署项目

在这里插入图片描述

clean指令

Maven指令的执行依赖于一些jar

  • 方式一:通过cmd执行
    在这里插入图片描述
  • 方式二:通过idea自带的命令行执行
    • 得以管理员身份打开idea,否则识别不出mvn命令
      在这里插入图片描述
  • 方式三:直接使用maven的可视化插件(常用)
    在这里插入图片描述

compile指令

  • compile是编译的意思,可以帮助我们生成一个target文件夹
  • 以后,只能在java文件夹中写代码,在resources文件夹里面,写配置文件
    • src/main/java中的代码,会编译到target/classes里面
    • src/main/java中的配置文件、其他文件,不会进入到target/classes里面
    • src/main/resources中的代码,会拷贝到target/classes里面
  • test文件是运行单元测试的,只会运行test文件里面java的单元测试
    • 先引入Maven中的Junit
    • Assert.assertEquals():在单元测试里面,使用Assert断言帮我们完成自动化的检验工作
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope>
</dependency>

package指令

package可以帮助我们把项目打包

  • 打包的名字:artifactId-version.jar(是artifactId加上文件的版本)
  • 打包的格式:
    • jar

      • 默认的打包格式
    • war

      • 需要指定
      • 指定的格式为:
<!-- 指定打包的格式,默认为jar ,可以配置为 war 和 pom -->
<packaging>jar</packaging>

install指令

  • install命令可以帮助我们把package生成的jar包复制到本地仓库中
  • 需要掌握根据 groupIdartifactIdversion找本地的jar
    eg:在这里插入图片描述

Maven的依赖管理

如何导包

按照上面说到的三步流程执行即可

scope作用域

每个依赖包都有自己作用范围
<scope>XXX</scope>
eg:

在这里插入图片描述

  • test
    • 仅仅在测试包(src/test/java)路径下有效,在 src/main/java路径下失效。
  • provided
    • 在编译的时候生效,在运行的时候失效
  • runtime
    • 在编译的时候失效,在运行的时候生效
    • 最常见的是:数据库的驱动包
    • 设计原因:就是防止写代码的时候,用了MySQL特有的类,切数据库的时候不好操作
  • compile
    • 默认的作用域
    • 在编译和运行的时候都生效

依赖传递

  • 指依赖具有传递性
  • eg:引入了commons-dbcp,而commons-dbcp又引入了commons-pool
    在这里插入图片描述

依赖冲突

  • 当在同一个项目中,导入同一个依赖的不同的版本,就会有冲突的问题。
    在这里插入图片描述
  • 如何解决依赖冲突
    • 声明优先原则
      • 是指这同一个项目的不同的版本的jar包,声明优先仅仅指的是第二级后面的依赖谁先在pom.xml中声明,以谁为准
      • 如果在pom.xml里,同时依赖了两个版本。是以最后一个指定的为准
    • 就近原则
      • 在进行依赖传递的时候,谁传递的次数比较少,以谁为准
      • 就近原则的优先级高于声明优先原则
    • 手动排除
      • 手动去排除传递过来的依赖

eg:

<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.22</version>
</dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.13</version>
</dependency>其中:
spring-context依赖了spring-beans(5.3.22) 优先!!!
spring-jdbc依赖了spring-beans(5.3.13)--------------------------------------------------<dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.13</version>
</dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.22</version>
</dependency>(优先!!!)--------------------------------------------------<dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.4</version><!-- 手动排除 --><exclusions><exclusion><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId></exclusion><exclusion><groupId>org.springframework</groupId><artifactId>spring-core</artifactId></exclusion></exclusions></dependency>
  • 提取常量
    • 这个是一个避免依赖冲突的方法。是后面工作中主要推荐的做法。
    • 常量名字不要随便取

eg:

    <properties><!--1. 提取了常量之后,可以避免依赖冲突的问题2. 提取了常量之后,可以方便我们后期管理这些依赖(查看版本,更换版本)--><spring.version>5.3.3</spring.version><mysql.version>5.1.47</mysql.version><druid.version>1.2.6</druid.version></properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>${druid.version}</version></dependency></dependencies>

使用Maven开发项目


路径问题的建议

  1. 不要用绝对路径
  2. 最好使用类加载器的方式去读文件

切换成Maven之后,开发模式的变化

  1. 之前需要手动下jar包,拷贝,添加到库文件;现在只用引入坐标
  2. 之前读配置文件,使用new FileInputStream();现在读配置文件,需要用classLoader,配置文件的位置需要在src/main/resource

eg:
以连接池中的druid举例:

public class druidDemo {public static void main(String[] args) throws Exception {testNormal();}private static void testNormal() throws Exception {Properties properties = new Properties();// 1. 绝对路径不要使用//  properties.load(new FileInputStream("druid.properties"));ClassLoader classLoader = druidDemo.class.getClassLoader();// 现在配置文件 需要用classLoader拿// 通过类加载器拿文件,会通过target/classes里面拿URL resource = classLoader.getResource("druid.properties");properties.load(new FileInputStream(resource.getPath()));// 或者// properties.load(classLoader.getResourceAsStream("druid.properties"));DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);Connection connection = dataSource.getConnection();Statement statement = connection.createStatement();boolean execute = statement.execute("insert into t_staff(name) values ('zs')");System.out.println(execute);}
}
<?xml version="1.0" encoding="UTF-8"?>
<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><parent><groupId>com.coo1heisenberg</groupId><artifactId>test_maven</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>module1</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><druid.version>1.2.6</druid.version></properties><dependencies><!-- https://mvnrepository.com/artifact/com.alibaba/druid --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>${druid.version}</version></dependency><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.16</version><scope>runtime</scope></dependency></dependencies></project>
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test?
characterEncoding=utf8&useSSL=false&serverTimezone=UTC
username=root
password=123456

Junit

Junit是一个被广泛使用的测试工具,可以帮助我们运行我们指定的方法

如何使用Junit

  • 导包
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version>
</dependency>
  • 使用

    • @Test
    • @After
      • 修饰的方法会在测试方法运行之后执行
      • 在每一次测试方法的前后都会运行
      • 一般用来准备数据
    • @Before
      • 修饰的方法会在测试方法运行之前执行
      • 在每一次测试方法的前后都会运行
      • 一般用来销毁数据
    • @BeforeClass
    • @AfterClass
  • 使用的注意事项:

    • @BeforeClass@AfterClass修饰的方法必须是静态的
    • @Test注解修饰的方法必须是public、必须是void、必须没有参数
    • 测试类必须在 src/test/java 路径下
    • 测试类的命名必须叫做 XxxTest
    • 测试方法(@Test注解修饰的方法)的命名必须叫做 testXxx();
  • 使用断言语句,来完成结果的确认

@Test
public void test1() {// 在单元测试里面,使用Assert 断言帮我们完成自动化的检验工作。Assert.assertEquals(new Integer(3), max);
}

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

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

相关文章

力扣刷题Day11--21. 合并两个有序链表(js)

目录 1&#xff0c;题目 2&#xff0c;代码 2.1迭代思想 2.2递归思想 3&#xff0c;学习与总结 3.1js中的链表类 3.2递归思想 3.3提醒自己 1&#xff0c;题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 2&am…

YOLOv9独家原创改进|加入RT-DETR中的HGBlock!

专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;主力高效涨点&#xff01;&#xff01;&#xff01; 一、改进点介绍 HGBlock是RT-DETR中使用的特征提取模块。 二、HGBlock模块详解 2.1 模块简介 HGBlock的主要思想&#xff1a; 一个并联的卷积模块与…

java上传本地文件到服务器共享

在Windows系统中,将本地文件夹中的某个文件上传到另一台Windows服务器电脑上,前提:两台电脑网络互通,要接收文件的Windows服务器文件夹开启了共享,可以被本机用如下方式进行写入和读取: 如何配置服务器共享请自行百度查找。 所需要的maven依赖如下: <dependency>…

AI辅助研发的崭新前景:技术进展、应用案例与挑战机遇

目录 前言1. 技术进展&#xff1a;深度学习、强化学习与生成模型的崭新应用1.1 深度学习的崭新应用1.2 强化学习的优化应用1.3 生成模型在创意设计中的应用 2. 行业应用案例&#xff1a;医药、汽车、电子等领域的AI助力2.1 医药领域的AI辅助研发2.2 汽车设计中的AI助力2.3 电子…

Qwen-Agent自定义Tool

qwen-agent项目部署 1、下载qwen-agent https://github.com/QwenLM/Qwen-Agent2、安装依赖环境 pip3 install -r requirements.txt自定义Tool cd qwen_agent/tools参考其他的工具&#xff0c;我这里创建了一个查询手机号归属地的工具get_mobile_address.py&#xff1a; im…

猜猜:哪句古诗与古代女子妆容有关?2024.3.8蚂蚁庄园今日答案:金盆水里拨红泥

蚂蚁庄园是一款爱心公益游戏&#xff0c;用户可以通过喂养小鸡&#xff0c;产生鸡蛋&#xff0c;并通过捐赠鸡蛋参与公益项目。用户每日完成答题就可以领取鸡饲料&#xff0c;使用鸡饲料喂鸡之后&#xff0c;会可以获得鸡蛋&#xff0c;可以通过鸡蛋来进行爱心捐赠。其中&#…

Docker部署ruoyi前后端分离项目

目录 一. 介绍前后端项目 二. 搭建局域网 2.1 创建网络 2.2 注意点 三. Redis 3.1 安装 3.2 配置redis.conf文件 3.3 测试 四. 安装MySQL 4.1 安装 4.2 配置my2.cnf文件 4.3 充许远程连接 五. 若依部署后端服务 5.1 数据导入 5.2 使用Dockerfile自定义镜像 5.3 运行…

Elasticsearch:从 ES|QL 到 Python 数据帧

在我之前的文章 “Elasticsearch&#xff1a;ES|QL 查询展示”&#xff0c;我展示了如何在 Kibana 中使用 ES|QL 对索引来进行查询及统计。在很多的情况下&#xff0c;我们需要在客户端中来对数据进行查询&#xff0c;那么我们该怎么办呢&#xff1f;我们需要使用到 Elasticsea…

能源大数据采集,为您提供专业数据采集服务

随着经济的不断发展&#xff0c;能源产业也逐渐成为国民经济的支柱产业之一。而对于能源行业来说&#xff0c;数据采集是一项至关重要的工作。以往&#xff0c;能源企业采集数据主要依靠人工收集、整理&#xff0c;但是这种方式不仅效率低下&#xff0c;而且容易出现数据不准确…

ai智能写作软件推荐,ai一键生成作文

很多小伙伴们都觉得写作是一件让人头痛的事情。因为不仅要让自己的文字流畅有条理&#xff0c;还需要通过一些修辞手法来使文章更加生动有趣。市场上不断涌现出各种各样的AI人工智能原创文章写作平台&#xff0c;哪些才好用&#xff0c;才是适合自己的呢&#xff1f; 爱制作ai …

如何在“Ubuntu 服务器上使用MariaDB配置Galera集群”?

一、 安装好三个MariaDB数据库 如何使用“Ubuntu 20.04桌面版&#xff0c;安装MariaDB数据库“&#xff1f;win10系统&#xff1f;-CSDN博客 二、第一个node1&#xff0c;修改 sudo nano /etc/mysql/conf.d/galera.cnf [mysqld] binlog_formatROW default-storage-enginei…

功能安全概念梳理二

什么是SEooC&#xff1f;SEooC和element有什么不一样&#xff1f; 参考链接&#xff1a;车规级 | ISO26262中对独立安全要素&#xff08;SEooC&#xff09;的开发要求 汽车功能安全(ISO 26262)系列: 到底什么是SEooC开发 安全措施(Safety measure)和安全机制(Safety mechanis…

【Leetcoode】2917. 找出数组中的 K-or 值

文章目录 题目思路代码结果 题目 题目链接 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 nums 中的 K-or 是一个满足以下条件的非负整数&#xff1a; 只有在 nums 中&#xff0c;至少存在 k 个元素的第 i 位值为 1 &#xff0c;那么 K-or 中的第 i 位的值才是 1 。…

安卓手机投屏到win10系统电脑,在电脑上可操作手机

使用scrcpy工具实现 scrcpy 就是通过 adb 调试的方式来将手机屏幕投到电脑上&#xff0c;并可以通过电脑控制您的 Android 设备。它可以通过 USB 连接&#xff0c;也可以通过 Wifi 连接&#xff08;类似于隔空投屏&#xff09;&#xff0c;而且不需要任何 root 权限&#xff0…

openGauss基于存储复制的资源池化安装部署流程

第一步&#xff1a;在主存储上创建资源池化需要的lun&#xff0c;以及远程同步复制xlog卷对应的lun&#xff0c;并且所有lun全部映射到业务计算节点上 1. 登录主集群DeviceManager&#xff0c;选择服务->LUN组->创建 来创建主集群LUN组&#xff1b; 2.登录主集群Device…

会议活动如何高效地执行?邀请媒体到场报道的注意点

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 会议活动高效执行要点与媒体邀请注意事项 一、会议活动高效执行要点&#xff1a; 明确目标&#xff1a;确立清晰、具体的会议目的和预期成果。 详细规划&#xff1a;制定详尽的活动流程…

波奇学Linux:信号的发送和保存

信号的发送的对象是pcb task_struct{ int signal; //0000 0000 .... 0001 进程pcb中存在int型的signal来保存信号&#xff0c;用位图的方式&#xff0c;比特位的0&#xff0c;1表示是否收到信号 比特位位置表示信号的编号。 发信号的本质就是修改task_struct的信号位图对应的…

“词苑千载,群芳竞秀,盛开一枝女儿花”说的是哪位历史人物?2024年3月8日蚂蚁庄园今日答案:李清照

蚂蚁庄园是一款爱心公益游戏&#xff0c;用户可以通过喂养小鸡&#xff0c;产生鸡蛋&#xff0c;并通过捐赠鸡蛋参与公益项目。用户每日完成答题就可以领取鸡饲料&#xff0c;使用鸡饲料喂鸡之后&#xff0c;会可以获得鸡蛋&#xff0c;可以通过鸡蛋来进行爱心捐赠。其中&#…

计算机大数据毕业设计-基于Flask的旅游推荐可视化系统的设计与实现

基于Flask的旅游推荐可视化系统的设计与实现 编程语言&#xff1a;Python3.10 涉及技术&#xff1a;FlaskMySQL8.0Echarts 开发工具&#xff1a;PyCharm 摘要&#xff1a;以Pycharm为旅游推荐系统开发工具&#xff0c;采用B/S结构&#xff0c;使用Python语言开发旅游景点推…

springcloud:3.6测试信号量隔离

服务提供者【test-provider8001】 Openfeign远程调用服务提供者搭建 文章地址http://t.csdnimg.cn/06iz8 相关接口 测试远程调用&#xff1a;http://localhost:8001/payment/index 服务消费者【test-consumer-resilience4j8004】 Openfeign远程调用消费者搭建 文章地址http://t…