Maven的核心概念

news2024/11/24 20:44:20

Maven的核心概念

—2020年06月11日

什么是Maven

Maven是一款服务于Java平台的自动化构建工具。

约定的目录结构

目录结构:

打开结构目录

  1. 根目录:工程名
  2. src目录:源码
  3. pom.xml文件:Maven工程的核心配置文件
  4. main目录:存放主程序
  5. test目录:存放测试程序
  6. java目录:存放java源文件
  7. resource目录:存放框架或其他工具的配置文件

为什么要约定目录结构

  1. Maven要负责我们这个项目的构建,以编译为例,Maven要想自动进行编译,那么它必须知道Java源文件保存在哪里。
  2. 如果我们自己定义的东西想要让框架或工具知道,有两种办法:
    1. 以配置的方式明确告诉框架 如:配置文件
    2. 遵守框架内部已经存在的约定 如:log4j.xml,log4j.properties
  3. 约定>配置>编码

POM

  1. 含义:Project Object Model 项目对象模型
  2. pom.xml对于Maven工程是核心配置文件,与构建工程相关的一切设置都在这个文件中进行配置。

坐标

使用下面三个向量在仓库中唯一定位一个Maven工程:

  1. groupid:公司或组织域名倒叙+项目名

    <groupId>org.springframework.boot</groupId>
    
  2. artifactid:模块名

    <artifactId>spring-boot-starter-parent</artifactId>
    
  3. version:版本

    <version>2.2.2.RELEASE</version>
    

Maven工程的坐标与仓库中路径的对应关系

坐标:

<groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.2.RELEASE</version>

路径:

org/springframework/boot/spring-boot-starter-parent/2.2.2.RELEASE/spring-boot-starter-parent-2.2.2.RELEASE.jar

依赖

Maven解析依赖信息时会到本地仓库中查找被依赖的jar包。

对于我们自己开发的Maven工程,使用install命令安装后就可以进入仓库。

依赖的范围:

程序结构

  1. compile

    • 对主程序是否有效 有效
    • 对测试程序是否有效 有效
    • 是否参与打包 参与
    • 是否参与部署 参与
    • 典型例子:spring-core
  2. test

    • 对主程序是否有效 无效
    • 对测试程序是否有效 有效
    • 是否参与打包 不参与
    • 是否参与部署 不参与
    • 典型的例子:junit
  3. provided

    • 对主程序是否有效 有效
    • 对测试程序是否有效 有效
    • 是否参与打包 不参与
    • 是否参与部署 不参与
    • 典型的例子:servlet-api.jar、jsp-api.jar

    程序结构

    程序结构

    依赖的传递性

    好处:可以传递的依赖不必在每个模块工程中重复声明,在依赖关系的最下面一层的工程中依赖一次即可。

    注意:非compile范围的依赖不能传递,所以在各个模块工程中,如果需要就必须重复声明依赖。

    依赖的排除

    <exclusions>
    	<exclusion>
    		<groupId>commons-logging</groupId>
    		<artifactId>commons-logging</artifactId>
    	</exclusion>
    </exclusions>
    

    依赖的原则

    • 作用:解决jar包的冲突问题

    • 路径最短优先原则

      根据依赖的传递性,MakeFriends可以选择log4j.1.2.17和log4j.1.2.14

      MakeFriends和log4j.1.2.17距离是3,但是和log4j.1.2.14距离是2,所以选择log4j.1.2.14。

      路径最短优先

    • 路径相同时先声明者优先

    先声明者优先

    先声明指的是dependency标签的声明顺序

    统一管理依赖版本

    1. 使用properties标签内使用自定义标签统一声明版本号

      注意:properties标签不只是只能用于声明依赖的版本号,如编码格式UTF-8,凡是需要统一声明后再引用的场合都可以使用。

    2. 在需要统一版本的位置,使用“${自定义标签名}”引用声明的版本号

    示例:

    properties标签中声明了lombok.version标签,声明了project.build.sourceEncoding标签

    <properties>
           <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    	<lombok.version>1.18.6</lombok.version>
    </properties>
    

    dependency标签中使用“${lombok.version}”引用了lombok.version标签中的值

    <dependency>
    	<groupId>org.projectlombok</groupId>
    	<artifactId>lombok</artifactId>
    	<version>${lombok.version}</version>
    	<scope>provided</scope>
    </dependency>
    

仓库

仓库的分类

  1. 本地仓库:当前电脑上部署的仓库目录,为当前电脑上所有Maven工程服务
  2. 远程仓库:
    1. 私服:搭建在局域网环境中,为局域网范围内所有Maven工程服务
    2. 中央仓库:架设在Internet上,为全世界所有Maven工程服务
    3. 中央仓库镜像:为了分担中央仓库的流量,提升用户访问速度

仓库中保存的内容:Maven工程

  1. Maven自身所需要的插件
  2. 第三方框架或工具的jar包
  3. 我们自己开发的Maven工程

生命周期/插件/目标

生命周期

  • 各个构建环节的执行顺序:不能打乱顺序,必须按照既定的顺序来执行
  • Maven的核心程序中定义了抽象的生命周期,生命周期中各个阶段的具体任务是由插件来完成的。
  • Maven核心程序为了更好的实现自动化构建,按照下面描述的特点执行生命周期中的各个阶段:不论现在要执行生命周期中的哪一个阶段,都是从这个生命周期最初的位置开始执行

插件和目标

  1. 生命周期的各个阶段仅仅定义了要执行的任务是什么。

  2. 各个阶段和插件的目标是对应的。

  3. 相似的目标由特定的插件来完成。

    生命周期阶段插件目标插件
    compilecompilemaven-compilee-plugin
    test-compiletestCompilemaven-compilee-plugin
  4. 可以将目标看做“调用插件功能的命令”

继承

  1. 现状

    对于过个模块中的依赖,如junt,1号模块中使用了4.0版本,2号模块中使用4.0版本,但是3号模块中使用了4.9版本,由于test范围的依赖不能传递,所以必然会分散在各个模块中,很容易造成版本不一致。

  2. 需求

    统一管理各个模块工程中对junit依赖的版本

  3. 解决思路

    将junit依赖统一提取到“父“工程中,在子工程中声明junit依赖时不指定版本,以父工程中统一设定的为准,同时也便于修改

  4. 操作步骤

    1. 创建一个Maven工程作为父工程。注意:打包的方式pom
    2. 在子工程中声明对父工程的引用
    3. 将子工程的坐标中与父工程坐标中的重复内容删除
    4. 在父工程中统一管理junit的依赖
    5. 在子工程中删除junit依赖的版本号部分
  5. 注意

    配置继承后,执行安装命令时要先安装父工程。

聚合

  1. 作用:一键安装各个模块工程

  2. 配置方式:在一个“总的聚合工程”中配置各个参与聚合的模块。

    <!-- 配置聚合 -->
    <modules>
           <!-- 指定子工程 -->
           <module>config</module>
           <module>gateway</module>
           <module>filesystem</module>
       </modules>
    
  3. 使用方式:在聚合工程的pom.xml 执行 mvn install。

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

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

相关文章

Zabbix监控系统:zabbix服务部署+基于Proxy分布式部署+zabbix主动与被动监控模式

一、Zabbix概述 1.1 简介 zabbix 是一个基于 Web 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。 zabbix 能监视各种网络参数&#xff0c;保证服务器系统的安全运营&#xff0c;提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。 zabbix…

三、GPIO按键读取

在上一篇文章中&#xff0c;我们详细讲解了GPIO的写函数。万事万物都具有一定的相对性&#xff0c;GPIO的操作也不例外。既然有写操作&#xff0c;那么必然也有读操作。有了上一篇文章的基础&#xff0c;理解本篇内容将会更加容易。 一、这篇文章能了解什么 本篇文章将基于上一…

为什么用LeSS?

实现适应性 LeSS是一个产品开发的组织系统&#xff0c;旨在最大化一个组织的适应性。关于适应性&#xff08;或者敏捷性&#xff0c;也就是敏捷开发的初衷&#xff09;我们是指优化&#xff1a; 以相对低的成本改变方向的能力&#xff0c;主要是基于通过频繁交付产生的探索。从…

【Linux 驱动】IMX6ULL eLCDIF驱动

1. eLCDIF设备树 lcdif: lcdif021c8000 {compatible "fsl,imx6ul-lcdif", "fsl,imx28-lcdif"; //属性reg <0x021c8000 0x4000>; //起始地址 地址大小interrupts <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>; …

1小时上手Alibaba Sentinel流控安全组件

微服务的雪崩效应 假如我们开发了一套分布式应用系统&#xff0c;前端应用分别向A/H/I/P四个服务发起调用请求&#xff1a; 但随着时间推移&#xff0c;假如服务 I 因为优化问题&#xff0c;导致需要 20 秒才能返回响应&#xff0c;这就必然会导致20秒内该请求线程会一直处于阻…

Prompt Enginnering(提示工程)

什么是提示工程 prompt enginnering是提示工程的意思&#xff0c;也有叫指令工程。 用白话讲&#xff1a;是我们对GPT说出的话&#xff0c;我们向它提问的信息&#xff0c;就是prompt。 官方一点&#xff1a;是我们使用自然语言提示来控制和优化生成式模型&#xff08;生成式…

《Milvus Cloud向量数据库指南》——SPLADE:基于BERT的Learned稀疏向量技术深度解析

在自然语言处理(NLP)领域,随着深度学习技术的飞速发展,预训练语言模型如BERT(Bidirectional Encoder Representations from Transformers)已成为推动研究与应用进步的重要基石。BERT通过其强大的上下文感知能力,在多项NLP任务中取得了显著成效,尤其是在文本表示和语义理…

深入理解Linux网络(五):TCP接收唤醒

深入理解Linux网络&#xff08;五&#xff09;&#xff1a;TCP接收唤醒 TCP接收唤醒由软中断提供服务。 软中断&#xff08;也就是 Linux ⾥的 ksoftirqd 进程&#xff09;⾥收到数据包以后&#xff0c;发现是 tcp 的包的话就会执⾏到 tcp_v4_rcv 函数。接着如果是 ESTABLISH…

GMSSL2.x编译鸿蒙静态库和动态库及使用

一、编译环境准备 1.1 开发工具 DevEco-Studio下载。 1.2 SDK下载 ​ 下载编译第三方库的SDK有两种方式&#xff0c;第一种方式从官方渠道根据电脑系统选择对应的SDK版本&#xff0c;第二种方式通过DevEco-Studio下载SDK。本文只介绍通过DevEco-Studio下载SDK的方式。 安装…

(十一)Spring教程——Bean基本配置与依赖注入之属性注入

1.Bean基本配置 在进行Bean配置的详细讲解之前&#xff0c;先来了解以下Bean配置的基础知识&#xff0c;以快速建立起Bean配置的初步概念。 1.1装配一个Bean 在Spring容器的配置文件中定义一个简要Bean的配置片段如下所示 <bean id”foo” class”com.smart.Foo”/> 一般…

【VSCode】安装 【ESP-IDF】插件及【ESP32-S3】新建工程和工程配置

一、搭建基础工程 二、基础工程的文件架构解析 三、调试相关工具介绍 1、串口下载2、JTAG 下载与调试 四、工程的文件架构解析 五、基础工程配置 一、搭建基础工程 在 VS Code 中新建 ESP-IDF 基础工程的步骤如下&#xff1a; 1、启动 VS Code 并打开命令面板 按下“Ctrl…

AI+BI结合,数据分析新方向 —— 奥威BI数据可视化引领未来

【AIBI结合&#xff0c;数据分析新方向 —— 奥威BI数据可视化引领未来】 在数字化浪潮汹涌的今天&#xff0c;企业对于数据的洞察力与决策效率的需求日益增长。奥威BI&#xff08;Business Intelligence&#xff09;数据可视化解决方案&#xff0c;以其独特的“AIBI”融合创新…

压缩视频在线免费 怎么免费压缩视频大小 哪个软件可以免费压缩视频

在数字媒体时代&#xff0c;视频文件的体积越来越大&#xff0c;这就需要我们找到高效的方式来压缩视频&#xff0c;以节省存储空间和提升分享速度。本文将为您介绍几款免费的视频压缩软件&#xff0c;帮助您轻松应对视频文件管理难题。 方法一、 安装并打开一款的视频软件。 …

通过iframe嵌套的不同域名的页面之间处理cookie存储失败的问题——js技能提升

最近同事在写mvc的后台管理系统&#xff0c;通过iframe实现不同域名的页面的嵌套。 但是有个问题&#xff0c;就是从父页面打开iframe的子页面时&#xff0c;需要登录子页面&#xff0c;此时需要将子页面登录后的token存储到子页面的cookie中&#xff0c;方便子页面的其他接口…

Python 全栈体系【三阶】(三)

第一章 Django 七、静态文件 1. 概述 静态文件是指在WEB应用中的图像文件、CSS文件、Javascript文件。 2. 静态文件的配置 settings.py中关于静态文件的配置如下&#xff1a; STATICFILES_DIRS [BASE_DIR , static, ]STATIC_URL /static/其中&#xff1a; STATICFILES…

Vue 3 + Vite 项目中安装 Tailwind CSS

官网&#xff1a;安装 - TailwindCSS中文文档 | TailwindCSS中文网 tips&#xff1a;只按照官网的配置可能会导致样式不加载/加载不生效的问题 1、正确安装指令 npm install -D tailwindcss postcss autoprefixer npx tailwindcss init -p 自动生成 ​tailwind.config.js​…

鱼眼摄像头-opencv校准(基于棋盘+畸变表)

一&#xff1a;主要参数说明 1&#xff1a;内参矩阵K 是3*3的矩阵&#xff0c;其类似格式 Knp.array([ [389.2109574522624, 0.0, 630.2525667489842], [0.0, 388.505701978078, 360.7886749292513], [0.0, 0.0, 1.0]]) 2&#xff1a;畸变系数 针对鱼眼相机&#xff1a;…

DVWA靶场超(详细教程)--跨站攻击(XSS+CSRF)

一、XSS 反射型xss 打开dvwa的Reflected Cross Site Scripting (XSS) &#xff08;1&#xff09;low等级 查看页面源码&#xff08;ctrlu&#xff09;该界面有提交按钮和输入框 在输入框随便输入点字符&#xff0c;点击提交 可以看见输入的helloword嵌入到界面中。 View sou…

MybatisPlus的使用与详细讲解

今天我们来讲解一下Mybatis的升级版&#xff0c;就是MybatisPlus. MybatisPlus是如何获取实现CRUD的数据库表信息的&#xff1f; 默认以类名驼峰转下划线作为表名 默认把名为id的字段作为主键 默认把变量名驼峰转下划线作为表的字段名 1.MybatisPlus中比较常见的注解 TableN…

红人点集登录逆向+接口逆向:SHA256算法和Webpack反爬

&#x1f50d; 引言 红人点集采取了一系列加密和限制措施&#xff0c;主要是对于参数加密和登录token加密。今天利用Python与JavaScript逆向工程技术&#xff0c;实现逆向登录然后请求接口获取数据。 &#x1f50d; 思路与步骤详解 &#x1f527; 解密登录接口参数&#xf…