Maven学习记录

news2025/2/25 3:38:10

一、Maven是什么

简单来说Maven是一个标准化的java管理和构建工具,它提供了一系列规范,包括项目结构,构建流程(编译,测试,打包,发布……),依赖管理等。

标准化就是定下的规矩,不能变,该是什么结构就是什么结构,该怎么构建就怎么构建。


二、Maven项目的标准项目结构

在这里插入图片描述

  • pom.xml:项目描述文件,maven项目管理的关键所在,提供项目版本,java版本管理,模块管理,依赖管理等关键信息
  • src/main:存放Java源码的目录
  • src/main/resources:存放资源文件的目录
  • src/test:存放测试源码的目录
  • target:所有编译、打包生成的文件都放在target目录里

三、pom.xml文件结构分析

文件基本结构如图

<project ...>
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.itranswarp.learnjava</groupId>
	<artifactId>hello</artifactId>
	<version>1.0</version>
	<packaging>jar</packaging>
	<properties>
        ...
	</properties>
	<dependencies>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>
	</dependencies>
</project>

其中:

  • modelVersion:指定POM(Project Object Model)结构版本,这个版本规定好了能够在Maven项目配置文件中使用的结构和元素
  • groupId:类似于Java包名,通常是公司或者组织名称
  • artifactId:java类名,通常是项目名称
  • version:版本
  • dependency:项目的依赖包

引用其他第三方库时,用groupId,artifactId, version确定这个库


三、依赖管理

Maven通过递归式的分析包的依赖关系,不断导入依赖的包,解决包的管理关系。

当我们声明了abc的依赖时,Maven自动把abc和xyz都加入了我们的项目依赖,不需要我们自己去研究abc是否需要依赖xyz。

因此,Maven的第一个作用就是解决依赖管理。我们声明了自己的项目需要abc,Maven会自动导入abc的jar包,再判断出abc需要xyz,又会自动导入xyz的jar包,这样,最终我们的项目会依赖abc和xyz两个jar包。
在这里插入图片描述
不同的依赖关系 dependence中的<scope>项目:

  • compile:编译时需要用到的jar包(默认)
  • test:编译Test时需要用到该jar包
  • runtime:编译时不需要,运行时需要,如jdbc
  • provided:编译时需要用到,但运行时由某个jdk或服务器提供

Maven通过维护一个中央仓库的信息,来维护依赖的下载信息,所有第三方库将自身的jar及相关信息上传至中央仓库,Maven就可以从中央仓库把依赖库下载到本地。一个jar包一旦被下载过,就会被Maven自动缓存在本地目录。

如果我们要引用一个第三方组件,比如okhttp,如何确切地获得它的groupId、artifactId和version?方法是通过search.maven.org搜索关键字,找到对应的组件后,直接复制

进入到pom.xml所在目录,输入
$ mvn clean package
在target目录下获得自动打包的jar


四、模块管理

可以立即为,Maven项目下分为多个不同的模块,每个模块本质上就是一个独立的maven项目,每个项目有独立的pom.xml.这也是大型软件降低复杂度的必要方法。

如果子模块的pom.xml存在多个相同的依赖,可以在大项目下提取出一个pom.xml,这样结构为
在这里插入图片描述
模块a可以简化为:

<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.itranswarp.learnjava</groupId>
        <artifactId>parent</artifactId>
        <version>1.0</version>
        <relativePath>../parent/pom.xml</relativePath>
    </parent>

    <artifactId>module-a</artifactId>
    <packaging>jar</packaging>
    <name>module-a</name>
</project>

即使用<parent>继承parent的内容


如果模块A依赖模块B,则模块A需要模块B的jar包才能正常编译,我们需要在模块A中引入模块B

    ...
    <dependencies>
        <dependency>
            <groupId>com.itranswarp.learnjava</groupId>
            <artifactId>module-b</artifactId>
            <version>1.0</version>
        </dependency>
    </dependencies>

编译时在根目录创建pom.xml统一编译,同时添加modules模块表明下属模块

<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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.itranswarp.learnjava</groupId>
    <artifactId>build</artifactId>
    <version>1.0</version>
    <packaging>pom</packaging>
    <name>build</name>

    <modules>
        <module>parent</module>
        <module>module-a</module>
        <module>module-b</module>
        <module>module-c</module>
    </modules>
</project>

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

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

相关文章

科技项目验收怎么做?不通过怎么办?

CMA、CNAS 一、科技项目验收是什么&#xff1f; 科技项目验收测试是依据GB/T 17544《信息技术 软件包 质量要求和测试》、GB/T 16260《软件工程 产品质量》&#xff0c;对申报国家、省、市科技项目、或企业申请中小企业创新基金、科技项目验收、科技成果鉴定等提供软件产品第…

机器学习——自然语言处理(NLP)一

机器学习——自然语言处理&#xff08;NLP&#xff09;一 文章目录 前言一、TF-IDF算法1.1. 原理1.2. 算法步骤&#xff1a;1.2.1. 文本预处理1.2.2. 构建词袋模型1.2.3. 计算TF-IDF值1.2.4. 特征选择 1.3. 代码实现1.3.1. TF-IDF1.3.2 计数器向量化文本1.3.3. 两者的区别1.3.4…

Android MeidiaCodec之OMXPluginBase与QComOMXPlugin实现本质(四十)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…

帧动画实现

背景&#xff1a; pag实现痛点 文档&#xff1a;libpag参考文档 1.打包依赖的类型缺失问题 2.pagview初始化文件过大,影响小程序打包 3.兼容性较差关键帧动画实现痛点: 当关键帧变化过多的时候&#xff0c;无法准确分辨出需要写出多少个关键帧&#xff0c;以及各个关键帧的具…

umi 中的路由切换动画如何实现

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 umi路由切换动画步骤 1、查看node版本2、搭建脚手架①.找个地方建一个空目录2.搭建umi脚手架3.正式配置路由动画1.1 在src文件目录下创建一个 layouts文件夹&#xff0c;在文…

【疑难杂症】用户无法使用sudo提权

目录 用户无法使用sudo提权 用户无法使用sudo提权 第一步&#xff1a;切换成超级用户。 su 第二步&#xff1a;打开/etc/sudoers文件。 vim /etc/sudoers 第三步&#xff1a;将用户添加到文件力。 这样就得到解决了......

404 not found nginx(dist打包后,刷新和跳转都是404 not found nginx的问题) 解决方案(打包发布在服务器)

当我们执行了yarn run build之后&#xff0c;生成dist文件 我们将代码放入nginx-1.24.0下面的html中 然后我们就配置conf文件下的nginx.conf 配置方面不介绍了&#xff0c;主要问题是因为没有加这句话 问题分析 index index.htm index.html; index 就是根目录&#xff0c;也就…

Android获取 H264视频流中的SPS和PPS

代码其实很简单&#xff0c;主要是要知道H264帧数据结构。分析H264码流结构的文章一大把&#xff0c;自己网上搜索一下就知道了。 背景&#xff1a; h264aac封装mp4格式的时候&#xff0c;需要获取视频流的sps,pps。 封装mp4文件格式的大体方案 使用 MediaExtractor 和 Medi…

Python实现机器学习(上)— 基础知识介绍及环境部署

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。本门课程将介绍人工智能相关概念&#xff0c;重点讲解机器学习原理机器基本算法&#xff08;监督学习及非监督学习&#xff09;。使用python&#xff0c;结合sklearn、jupyter-notebook进行编程&#xff0c;介绍iris、匹马…

【Mysql系列】(二)日志系统:一条更新语句是如何执行的

有的时候博客内容会有变动&#xff0c;首发博客是最新的&#xff0c;其他博客地址可能会未同步,认准https://blog.zysicyj.top 这篇文章是从Github ReadMe拷贝的&#xff0c;内容实践下载是没问题的&#xff0c;能够正常发送短信&#xff0c;而且也不需要服务器&#xff0c;本地…

语言基础篇14——Python源文件组织结构,模块与包、命名空间与作用域的奥秘

源文件组织结构 模块与包 模块&#xff0c;module 一个文件&#xff0c;包含Python源码&#xff0c;以.py为后缀 包&#xff0c;package 结构化模块&#xff0c;一个文件夹&#xff0c;包含__init__.py文件、若干.py文件和若干文件夹 module对象 模块和包被导入后为modu…

保姆级-微信小程序开发教程

一&#xff0c;注册微信小程序 如果你还没有微信公众平台的账号&#xff0c;请先进入微信公众平台首页&#xff0c;点击 “立即注册” 按钮进行注册。注册的账号类型可以是订阅号、服务号、小程序以及企业微信&#xff0c;我们选择 “小程序” 即可。 接着填写账号信息&#x…

洗衣洗鞋小程序干洗店洗衣店上门取衣门店管理系统开发定制

校园洗衣洗鞋软件是一款非常优质的校园洗护服务软件&#xff0c;软件功能非常强大&#xff0c;学生们可以通过软件预约洗衣服务&#xff0c;支持上门取送&#xff0c;还能够浏览洗衣产品商城&#xff0c;操作非常便捷&#xff0c;感兴趣的朋友快来体验吧&#xff01; 后台管理…

开发板插入sd/tf卡后自动挂载

测试平台-hisi-dv500 要在Linux系统上实现TF卡&#xff08;Micro SD卡&#xff09;插入后自动挂载&#xff0c;类似于SD卡/TF卡插入也会触发内核事件,你可以使用udev工具来监控并处理这些事件,创建一个udev规则文件来捕获TF卡插入事件. 1:创建一个udev规则文件&#xff0c;例…

飞书即时消息无需API开发连接Cohere,打造飞书AI智能问答助手

飞书即时消息用户使用场景&#xff1a; 许多企业都在使用飞书系统进行协同办公&#xff0c;而现在有了Cohere大语言模型技术&#xff0c;能够根据用户的提问来自动产生回答&#xff0c;无需人为干预。对于企业负责人来说&#xff0c;他们认为如果将Cohere技术融入到飞书机器人中…

SpringBoot+jSerialComm实现Java串口通信 读取串口数据以及发送数据

记录一下使用SpringBootjSerialComm实现Java串口通信&#xff0c;使用Java语言开发串口&#xff0c;对串口进行读写操作,在win和linux系统都是可以的&#xff0c;有一点好处是不需要导入额外的文件。 案例demo源码&#xff1a;SpringBootjSerialComm实现Java串口通信 读取串口…

easypoi导入数值精度丢失

记录一下easypoi导入数值,精度丢失的解决方案 1.导入的excel字段如图 2.easypoi解析CellValueService部分源码: 这个方法拿到的原始数据如图&#xff1a; 解决方法&#xff1a; 1.统一处理方式&#xff1a;在解析的时候使用DecimaFormat进行数据格式化 //格式化为6为小数 De…

Day57|leetcode 647. 回文子串、516.最长回文子序列

leetcode 647. 回文子串 题目链接&#xff1a;647. 回文子串 - 力扣&#xff08;LeetCode&#xff09; 视频链接&#xff1a;动态规划&#xff0c;字符串性质决定了DP数组的定义 | LeetCode&#xff1a;647.回文子串_哔哩哔哩_bilibili 题目概述 给你一个字符串 s &#xff0c;…

使用动态住宅代理还能带来哪些好处?

一、什么是动态住宅代理ip 动态住宅代理是一种代理技术&#xff0c;它利用代理服务器中转用户和目标服务器之间的网络流量&#xff0c;实现用户真实位置的屏蔽。代理提供商会有自己的ip大池子&#xff0c;当你通过代理服务器向网站发送请求时&#xff0c;服务器会从池子中选中…

Spring系列文章:Spring6集成MyBatis3.5

1、引入依赖 <dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>6.0.2</version></dependency><dependency><groupId>org.mybatis</groupId><artif…