2024-Java-Maven学习笔记

news2025/10/29 3:47:36

Maven

Maven是一个Java项目管理和构建工具,作用:定义(规范)项目结构、项目依赖、使用统一的方式自动化构建(clean、compile)。

提供了一套依赖管理机制:利用仓库统一管理jar包,利用依赖传递的特性解决jar包版本冲突问题。

视频教程

总结

核心掌握目标
安装maven安装、环境变量、maven配置文件修改
工程创建gav属性理解、IDEA创建工程、项目结构
依赖管理依赖添加、依赖传递、版本提取、导入依赖错误解决
构建管理构建过程、构建场景、构建周期
继承和聚合理解继承和聚合的作用和配置
  • 所有依赖在父maven项目中管理,子maven无需使用版本;
  • 可选依赖放入;
  • 所有依赖的版本号通过管理;
  • 管理所有子模块;

Maven配置文件

需要修改的地方如下:

<!--  jar包下载本地地址 -->
<localRepository>D:\data\maven-repository</localRepository>


<!--  jar包下载仓库 -->
<mirrors>
    <mirror>
      <id>nexus-aliyun</id>
      <mirrorOf>central</mirrorOf>
      <name>Nexus aliyun</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>
    <mirror>
      <id>huaweicloud</id>
      <mirrorOf>*</mirrorOf>
      <name>huawei Cloud</name>
      <url>https://repo.huaweicloud.com/repository/maven/</url>
    </mirror>
    <mirror>
      <id>central</id>
      <mirrorOf>central</mirrorOf>
      <name>Maven Repository Switchboard</name>
      <url>https://repo2.maven.org/maven2/</url>
    </mirror>
  </mirrors>

约定大于配置

pom.xml详解

<?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>
    <!-- 本工程的坐标信息,保证唯一性 -->
    <groupId>com.lywtimer</groupId>
    <artifactId>j-pure</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!-- 设置打包方式 默认jar,常用war,pom -->
    <packaging>pom</packaging>
    <modules>
        <module>backend</module>
        <module>demo</module>
    </modules>
    <!--
         通常去设置依赖的版本
         好处:统一管理版本;多个jar包使用同一个版本时,简化配置
         ${junit.jupiter.version}
     -->
    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <com.mysql.version>8.3.0</com.mysql.version>
        <org.junit.jupiter.version>5.10.2</org.junit.jupiter.version>
    </properties>
    <!--
     通过一个坐标信息去引用jar包
     去 https://mvnrepository.com/ 中央仓库找
     需要确认到本地仓库,如果出现异常问题可以删掉,重新下载。 D:\data\maven-repository\org\junit\jupiter\junit-jupiter-api\5.10.2
     -->
    <!-- 对子工程必须要的依赖,放在这里 -->
    <dependencies>
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>${com.mysql.version}</version>
        </dependency>
    </dependencies>
    <!--
        对子工程不是必须要的依赖,放在这里
        虽然子工程还需要做一次依赖,但可以做版本控制
    -->
    <dependencyManagement>
        <dependencies>
            <!--
              引用本地的项目,需要 install
              -->
            <dependency>
                <groupId>org.junit.jupiter</groupId>
                <artifactId>junit-jupiter-api</artifactId>
                <version>${org.junit.jupiter.version}</version>
                <!--
                 手动排除依赖
                 -->
                <exclusions>
                    <!--                <exclusion>-->
                    <!--                    <groupId>com.mysql</groupId>-->
                    <!--                    <artifactId>mysql-connector-j</artifactId>-->
                    <!--                </exclusion>-->
                </exclusions>
                <!--
                 依赖范围
                 编译(main/java)
                 测试(main/test)
                 运行/打包(包含在打的包中)

                 test       编译× 测试√  打包×     junit
                 provided   编译√ 测试√  打包×     servlet
                 compile    编译√ 测试√  打包√     默认
                 runtime    编译× 测试√  打包√     反射、数据库驱动
                 system = provided 不会依赖仓库中的jar包,结合<systemPath>使用,已经废弃

                 1.首先 依赖范围建议,哪怕所有的范围都设置compile,也不影响正常使用
                 2.中央仓库会提供scope,IDEA有自动补全功能
                 3.大多数包都是compile
                 -->
                <!--作用访问是 test、provided 就不会传递-->
                <scope>test</scope>
                <!--是否传递 默认是false,会传递-->
                <optional>false</optional>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

生命周期

生命周期会依次执行 clean validate compile test package verify install

Test* 的类会在 test 执行的时候被扫描

install:会下载到本地仓库

依赖传递的配置

#被依赖项目的pom.xml
	<groupId>com.mszlu</groupId>
    <artifactId>trans</artifactId>
    <version>1.0-SNAPSHOT</version>
    
	<dependencies>
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>8.0.33</version>
            <!--作用访问是 test、provided 就不会传递-->
            <scope>compile</scope>
            <!--是否传递 默认是false,会传递-->
            <optional>true</optional>
        </dependency>
    </dependencies>
    
#依赖项目的pom.xml
<dependencies>
		<!--
         引用本地的项目,需要 install
         -->
        <dependency>
            <groupId>com.mszlu</groupId>
            <artifactId>trans</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
</dependencies>

#如果被依赖项目无法处理,通过两种方式可以解除依赖
#引入不一致版本的依赖(覆盖)
#使用exclusion手动排除


创建聚合工程

右键父工程目录 → New → Module → Parent选 None

<!-- 父工程聚合子工程 pom.xml -->
  <modules>
  	  <module>backend</module>
      <module>demo</module>
  </modules>
  
<!-- 两个子工程依赖后,依赖就会传递 -->  
<!-- 在父工程中的生命周期方法会在所有管理的模块依次执行 -->  

Maven继承

聚合工程的另外一种体现,把依赖统一到父工程中。

<!-- 修改子工程的 pom.xml -->
<parent>
	<groupId>org.example</groupId>
	<artifactId>j-pure</artifactId>
	<version>1.0-SNAPSHOT</version>
</parent>

<!-- 手动删除重复的配置 -->
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>

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

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

相关文章

C#如何用NPOI创建、读取、更新Excel文件

一.获取引用NPOI VS2017&#xff0c;通过Nuget工具包下载NPOI到指定的项目中&#xff0c;如下 二.添加如下命名空间,其中HSSF是操作*.xls文件&#xff0c;XSSF操作*.xlsx文件. using NPOI; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using NPOI.HSSF.UserModel; …

Debian 安装 Docker

Debian 安装 Docker。 这是官方安装文档 Install Docker Engine on Debian | Docker DocsLearn how to install Docker Engine on Debian. These instructions cover the different installation methods, how to uninstall, and next steps.https://docs.docker.com/engine/i…

如何将普通maven项目转为maven-web项目

文件-项目结构&#xff08;File-->Project Structure &#xff09; 模块-->learn&#xff08;moudle-->learn&#xff09; 选中需要添加web的moudle&#xff0c;点击加号&#xff0c;我得是learn&#xff0c;单击选中后进行下如图操作&#xff1a; 编辑路径 结果如下…

【网站项目】英语学习激励系统小程序

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

神经网络背后的数学原理

原文地址&#xff1a;The Math Behind Neural Networks 2024 年 3 月 29 日 深入研究现代人工智能的支柱——神经网络&#xff0c;了解其数学原理&#xff0c;从头开始实现它&#xff0c;并探索其应用。 神经网络是人工智能 &#xff08;AI&#xff09; 的核心&#xff0c;为…

性能优化“万金油”:缓存Cache

1、首次请求数据时,先从缓存中获取,如果没有,则继续向数据库中获取。获取到数据后,将数据保存到缓存中。再次请求数据,一样先从缓存中获取,成功获取,“缓存命中”。多次请求中,命中次数占全部请求次数的比例,叫“命中率”。如果数据源的数据发生变化,而缓存中的数据没…

【RV1106的ISP使用记录之一】基础环境搭建

公司缺少ISP工程师&#xff0c;做为图像算法工程师的我这就不就给顶上来了么&#xff0c;也没给发两份工资&#xff0c;唉~ 先写个标题&#xff0c;占一个新坑&#xff0c;记录RK平台的传统ISP工作。 一、基础环境的硬件包括三部分&#xff1a; 1、相机环境&#xff0c;用于采…

3D开发工具HOOPS:推动汽车行业CAD可视化发展

在最近的行业对话中&#xff0c;Tech Soft 3D&#xff08;HOOPS厂商&#xff09;的Jonathan Girroir和Actify的Peter West探讨了CAD可视化在当代企业中的重要性和挑战。作为CAD可视化领域的佼佼者&#xff0c;Actify通过其广受欢迎的Spinfire应用&#xff0c;赋能了全球40多个国…

单链表总结提升

这篇博客讲解数据结构中的单链表&#xff0c;包括单链表的基础知识和我对链表实现的总结理解&#xff0c;希望可以帮助到正在学习的小伙伴&#xff0c;也希望得到小伙伴们的关注和支持哦~ 目录 1.单链表的概念 1.2顺序表和链表的对比 顺序表&#xff1a; 链表&#xff1a;…

【牛客SQL快速入门】SQL基础(三)

一、条件函数 IF 条件函数 IF函数是最常用到的条件函数&#xff0c;写法为 if(xn,a,b)&#xff0c;xn代表判断条件&#xff0c;如果xn时&#xff0c;那么结果返回a&#xff0c;否则返回b。 -- 把非北京大学的用户统一归为其他大学 Select device_id,if(university ‘北京大…

C++设计模式:享元模式(十一)

1、定义与动机 概述&#xff1a;享元模式和单例模式一样&#xff0c;都是为了解决程序的性能问题。面向对象很好地解决了"抽象"的问题&#xff0c;但是必不可免得要付出一定的代价。对于通常情况来讲&#xff0c;面向对象的成本大豆可以忽略不计。但是某些情况&#…

T2.数据库原理

2.1 关系模型概述 1.域 域&#xff1a; 一组有相同数据类型的值得集合 2.笛卡尔积 笛卡尔积&#xff1a; 设任意的N个域D1,D2,…,Dn。 3、关系的定义和性质 &#xff08;1&#xff09;关系的数学定义&#xff1a; 在笛卡儿积中取出有实际意义的元组来构造关系。 关系也是…

R语言绘制一次和二次相关性热图

在数据探索的过程中&#xff0c;我们往往会对数据与数据的相关性进行分析&#xff0c;例如我们常用的corrplot包&#xff0c;或者psych包中的corr.test函数&#xff0c;对两两变量间的相关性进行分析。我们常常会看到这样的相关性热图&#xff1a; 但有时变量间的关系并非线性…

new mars3d.thing.Sightline({ 实现航线穿透山体/模型部分的虚线效果且不随视角变化而变化

摘要&#xff1a;new mars3d.thing.Sightline({ 实现航线穿透山体/模型部分的虚线效果且不随视角变化而变化&#xff0c;避免depthFailMaterial材质随着视角变化遮挡部分也会虚线效果。 前置说明&#xff1a; 1.不可视区域颜色hiddenColor支持设置材质&#xff0c;实现穿过山…

【spring】@PostConstruct和@PreDestroy注解学习

PostConstruct和PreDestroy介绍 PostConstruct和PreDestroy是Java EE&#xff08;Enterprise Edition&#xff09;和Java SE&#xff08;Standard Edition&#xff09;中的注解&#xff0c;它们用于指定一个bean在其生命周期的特定点应该执行的方法。 这两个注解是JSR250规范中…

【高端电流检测IC储能产品应用方案】耐压28V侧轨的电流检测芯片FP130A 应用于电脑电源,开关电源以及多口快充充电器,户外移动电源,适配器,电池充电器等

电流检测技术常用于高压短路保护、电机控制、DC/DC换流器、系统功耗管理、二次电池的电流管理、蓄电池管理等电流侦测等场景。对于大多数应用而言&#xff0c;都是间接测量电阻两端的跨压差来获取待测电流。 如下面的高端电流检测芯片FP130A&#xff0c;丝印是FC915。电路原理图…

MySQL 全文检索

不是所有的数据表都支持全文检索 MySQL支持多种底层数据库引擎&#xff0c;但是并非所有的引擎支持全文检索 &#xff0c;目前最常用引擎是是MyISAM和InnoDB&#xff1b;前者支持全文检索&#xff0c;后者不支持。 booolean模式操作符 操作符含义必须有-必须不包含>包含对应…

Unity 中画线

前言&#xff1a; 在Unity项目中&#xff0c;调试和可视化是开发过程中不可或缺的部分。其中&#xff0c;绘制线条是一种常见的手段&#xff0c;可以用于在Scene场景和Game视图中进行调试和展示。本篇博客将为你介绍多种不同的绘制线条方法&#xff0c;帮助你轻松应对各种调试…

rust使用print控制台打印输出五颜六色的彩色红色字体

想要在控制台打印输出彩色的字体&#xff0c;可以使用一些已经封装好的依赖库&#xff0c;比如ansi_term这个依赖库&#xff0c;官方依赖库地址&#xff1a;https://crates.io/crates/ansi_term 安装依赖&#xff1a; cargo add ansi_term 或者在Cargo.toml文件中加入&#…

HWOD:在含有空格的字符串中统计大写字母的个数

一、知识点 回车键的ASCII码是10 二、题目 1、描述 找出给定字符串中大写字符(即A-Z)的个数。 数据范围&#xff1a;字符串长度&#xff1a;1≤∣s∣≤250 字符串中可能包含空格或其他字符 2、输入 对于每组样例&#xff0c;输入一行&#xff0c;代表待统计的字符串 …