标准的maven依赖包应该包含哪些东西?
背景
在阅读源码的时候,发现有一些maven依赖包里面没有包含pom文件,一些maven依赖包包含,而且除此之外还有一些细微的差异。今天就来聊一下关于一个标准的依赖包应该是什么样子的。
一个标准的Maven依赖包通常包含以下文件:
Java类文件:这是Maven依赖包的核心,包含项目中所有的Java代码。
POM文件:这是一个XML文件,包含有关项目的元数据,如项目名称、版本、依赖关系等。
LICENSE文件:这是一个文本文件,包含有关项目的许可证信息。
NOTICE文件:这是一个文本文件,包含关于项目的版权声明和其他重要信息。
META-INF目录:这是一个特殊目录,包含有关项目的元数据。META-INF目录中通常包含以下文件:
MANIFEST.MF:这是一个清单文件,包含有关项目的元数据,如版本号、依赖关系等。
INDEX.LIST:这是一个索引文件,用于记录项目中的类文件。 总的来说,标准的Maven依赖包具有规范化的目录结构,并且包含所有必要的文件,以便完全描述项目和其依赖关系。
eg:
假设有一个名为my-library的项目,打成一个my-library-1.0.0.jar的依赖包,那么它的目录结构可能长这样:
my-library-1.0.0.jar
|--- META-INF
| |--- MANIFEST.MF
| |--- maven
| | |--- com.example
| | | |--- my-library
| | | | |--- pom.xml
| | | | |--- pom.properties
|--- com
| |--- example
| | |--- mylibrary
| | | |--- ... (存放代码的类文件)
其中,META-INF目录包含了打包时的一些元数据信息,其中:
MANIFEST.MF文件是打包时生成的清单文件,描述了一些关于jar文件的基本信息,比如版本、创建者等。
maven目录中的文件存放了项目的maven相关信息,其中:
pom.xml文件是项目的构建文件,存储了项目的构建信息,如项目依赖的jar包等。
pom.properties文件是项目的一些属性文件,存储了项目的一些重要信息,如项目名称、版本等。
这是一个简单的例子,实际上maven依赖包可能会包含更多的文件和目录,具体取决于项目的具体情况。
为什么有些 maven依赖下面的META-INF里面没有找到pom文件?
如果在META-INF目录中没有找到POM文件,这可能是因为以下几种原因:
编译方式:有些项目可能选择不将POM文件打包到JAR文件中,而是单独存储在Maven仓库中。
依赖项版本:某些旧版本的依赖项可能不包含POM文件。
缺少依赖项:如果您的项目缺少必要的依赖项,则可能找不到POM文件。
问题的Maven仓库:如果Maven仓库中存在损坏或不正确的数据,则可能无法找到POM文件。
通常上面第二点是重点原因,就会当时打包依赖的maven版本过低
为什么旧版本的maven依赖里不包含pom文件
一些旧版本的maven依赖项不包含POM文件的原因是,这些依赖项在当时的标准中不需要POM文件,或者是在发布时未包含POM文件。
在Maven的早期版本中,POM文件并不是必需的,因此许多项目可能没有提供POM文件。然而,随着Maven技术的发展,POM文件已经被认为是一个重要的组件,用于描述项目信息,如项目依赖性和构建规则。因此,现在所有的Maven项目都应该提供POM文件。
如果您需要使用一个不包含POM文件的旧版本依赖项,则需要从源代码手动构建并安装该项目,以便您可以引用它。然后,您可以通过在自己的POM文件中声明该依赖项来使用它。
写在最后
Maven社区在没有明确声明之前,一直认为所有Maven依赖项都应该带有POM文件。然而,在Maven 3.0版本及更高版本中,Maven的构建系统在打包和发布Maven依赖项时会严格检查是否包含POM文件。 如果在Maven 3.0版本及更高版本中,您尝试发布一个没有POM文件的Maven依赖项,Maven将抛出一个异常,指出POM文件是必需的。因此,如果您使用Maven 3.0版本或更高版本,则应该保证您发布的所有Maven依赖项都带有POM文件。
相关文章:
标准的maven依赖包应该包含哪些东西?
背景在阅读源码的时候,发现有一些maven依赖包里面没有包含pom文件,一些maven依赖包包含,而且除此之外还有一些细微的差异。今天就来聊一下关于一个标准的依赖包应该是什么样子的。一个标准的Maven依赖包通常包含以下文件:Java类文…...
网络安全-Nmap
网络安全-Nmap Nmap-号称诸神之眼 这个呢就是用来扫描网络端口的 Namp的工作原理很像一个雷达 做任何攻击之前,得先知道怎么去找破绽,而不是钢铁洪流,那个是不叫渗透了,叫硬钢。 咋用呢? 很简单 直接 nmap 后面跟网址…...
【物联网】mqtt初体验
文章目录安装EMQXjava集成添加依赖mqtt配置参数发布组件订阅组件测试接口接口测试最近在了解物联网云平台方面的知识,解除了mqtt协议,只看书籍难免有些枯燥,所以直接试验一下,便于巩固理论知识。 broker服务器操作系统:…...
2023年阿里云活动有哪些实例规格的云服务器?如何选择这些实例规格
2023年阿里云活动有哪些实例规格的云服务器?新手用户通过阿里云活动选购阿里云服务器的时候实例规格应该怎么选,因为同配置的云服务器往往有多种不同是规格的云服务器可供选择,而且不同实例规格的云服务器之间价格差别还比较大,因…...
深入理解 Handler(java 层 + native 层)
文章目录回顾线程消息队列时怎样实现的消息是怎么传递的?Handle 的延迟消息是怎么处理的?IdleHandler 的原理主线程进入了 Looper 循环为什么没有 ANR?消息屏障是什么?回顾 之前学习过Handler相关的基础知识,今天再学…...
初步认识操作系统(Operator System)
操作系统一,冯诺依曼体系结构内存的重要作用二,操作系统的概念三,设计操作系统的目的三,操作系统在计算机体系中的定位四,操作系统是如何进行管理的一,冯诺依曼体系结构 在众多计算机相关的书籍中ÿ…...
Android—HTTPS部署自签名证书
一、生成自签名私有证书单向认证(只需要服务端证书) 生成server_ks.jks服务端密钥配置到服务端生成server.cer服务端证书配置到客户端 双向认证(还需要客户端证书,和信任证书) 生成client_ks.jks客户端密钥配置到客户…...
java基于springboot+vue微信小程序的学生健康管理
任何系统都要遵循系统设计的基本流程,本系统也不例外,同样需要经过市场调研,需求分析,概要设计,详细设计,编码,测试这些步骤,基于Java语言、微信小程序技术设计并实现了学生健康管理小程序。系统主要包括系统首页、个人中心、学生管理、健康档案管理、体检报告管理、健康评估管…...
金三银四丨黑蛋老师带你剖析-漏洞岗
作者丨黑蛋病毒岗之前我们简单看了看二进制逆向岗位和漏洞岗,今天我们来看一看病毒岗位,就单纯看二进制病毒岗位和漏洞岗位,其所需要的基础知识是差不多的,在Windows平台上,无非就是汇编,C语言,…...
pinia实战 购物车(自定义插件实现pinia持久化)
目录 一、实例 二、需求 三. 代码解析 shop.vue shop.ts 四、持久化插件 插件介绍 持久化实现思路 一、实例 二、需求 单选全选功能,并且可以互相联动 小计功能 总计功能 商品加减,数量为零时不能在减 三. 代码解析 shop.vue 1.获取shop模块实…...
idea使用本地代码远程调试线上运行代码---linux环境
场景: 之前介绍过windows环境上,用idea进行远程调试那么在linux环境下实战一下 环境: linux 测试应用:使用docker部署的platform-multiappcenter-base-app-1.0.0-SNAPSHOT.jar 应用 测试应用端口:19001 测试工具&…...
Java 基础面试题——集合
目录1.Java 有哪些常用容器(集合)?2.Collection 和 Collections 有什么区别?3.List、Set、Map 之间的区别是什么?4.HashMap 的长度为什么是 2 的 N 次方?源码中是如何保证的?5.HashMap 和 Hasht…...
编程思想、方法论和架构模式的应用
概要编程思想是指在编写代码时所采用的基本思维方式和方法论。分类编程思想分类:面向对象编程(Object-Oriented Programming,简称OOP):把数据和对数据的操作封装在一起,通过类和对象的概念实现模块化、可重…...
Vue|事件处理
事件处理1. 事件使用1.1 事件绑定1.2 事件参数2. 事件修饰符2.1 阻止默认事件2.2 阻止事件冒泡2.3 事件只允许触发一次2.4 事件捕获2.5 操作当前元素2.6 行为立即执行无需等待回调3. 键盘事件4. 本章小结4.1 事件使用小结4.2 事件修饰符小结4.3 键盘事件小结1. 事件使用 1.1 事…...
css书写方式
目录标题一、css是什么?二、css的书写方式1、行内样式【不推荐使用,太固定】2、页面样式(又叫内联样式)3、外联样式【店家推荐】4、import与link标签的区别一、css是什么? css(cascade style sheet)是用来装饰和装扮页…...
Python网络爬虫 学习笔记(2)BeaufitulSoup库
文章目录BeautifulSoup库的基本介绍HTML标签的获取和相关属性HTML文档的遍历prettify()方法使用BeautifulSoup库对HTML文件进行内容查找信息的标记的相关概念(非重点)find_all()方法(重点)综合实例:爬取软科2022中国大…...
JavaScript------内建对象
一、解构赋值 1、数组的解构 1.1、解构赋值 const arr ["孙悟空", "猪八戒", "沙和尚"];let a, b, c;[a, b, c] arr; // 等同于 [a, b, c] ["孙悟空", "猪八戒", "沙和尚"] 1.2、声明同时解构 let [d, e…...
React + Redux 处理异步请求
redux 处理异步请求 方式一:在 componentDidmount 中直接进⾏请求,在将数据同步到 redux 创建 Store 仓库 import {createStore } from redux;const defaultState = {banners: [] }const reducer =...
揭秘涨薪50%经验:从功能测试到自动化测试,我是如何蜕变的?
本人在今年互联网大环境如此严峻的情况下,作为一个刚毕业不到一年的初级测试,赶在“金三银四”依然拿到了一些面试机会,并且成功拿下4家公司的offer,其中不乏互联网大厂,而且最高总包给到了接近double(无炫…...
【论文速递】MMM2020 - 电子科技大学提出一种新颖的局部变换模块提升小样本分割泛化性能
【论文速递】MMM2020 - 电子科技大学提出一种新颖的局部变换模块提升小样本分割泛化性能 【论文原文】:A New Local Transformation Module for Few-shot Segmentation 【作者信息】:Yuwei Yang, Fanman Meng, Hongliang Li, Qingbo Wu,Xiaolong Xu an…...
终极RPG Maker解密指南:如何快速提取加密游戏资源
终极RPG Maker解密指南:如何快速提取加密游戏资源 【免费下载链接】RPGMakerDecrypter Tool for decrypting and extracting RPG Maker XP, VX and VX Ace encrypted archives and MV and MZ encrypted files. 项目地址: https://gitcode.com/gh_mirrors/rp/RPGMa…...
如何3步将B站缓存视频转换为通用MP4格式:新手完整操作指南
如何3步将B站缓存视频转换为通用MP4格式:新手完整操作指南 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾经遇到过这种情况…...
5分钟搞定视频字幕:开源神器VideoSrt让你告别手动打字幕时代
5分钟搞定视频字幕:开源神器VideoSrt让你告别手动打字幕时代 【免费下载链接】video-srt-windows 这是一个可以识别视频语音自动生成字幕SRT文件的开源 Windows-GUI 软件工具。 项目地址: https://gitcode.com/gh_mirrors/vi/video-srt-windows 想象一下这个…...
别再死记硬背了!用这5个PyTorch实战项目,把面试题考点变成你的肌肉记忆
用5个PyTorch实战项目将面试考点转化为肌肉记忆 在准备深度学习工程师面试时,很多人会陷入死记硬背的误区——把各种概念、API调用和理论知识点机械地记在笔记本上,却在面对实际编码问题时手足无措。这种学习方式不仅效率低下,更重要的是无法…...
基于Claude Code构建个人操作系统:无代码自动化与AI协作实践
1. 项目概述:一个极简的“个人操作系统”最近在折腾AI自动化工具,发现了一个很有意思的项目,叫personal-os,简称pos。这玩意儿本质上就是一个Bash脚本,但它做的事情,是把Claude Code这个AI编程助手…...
联邦学习SCAFFOLD算法:从原理到实战,破解数据异构困局
联邦学习SCAFFOLD算法:从原理到实战,破解数据异构困局 引言 在联邦学习的落地实践中,客户端数据“非独立同分布”(Non-IID)带来的“客户端漂移”问题,一直是制约模型性能与收敛速度的核心瓶颈。传统的 Fe…...
AI代理协作三模式:从将才到帅才,规避认知负债陷阱
1. 项目概述:理解AI代理协作的三种模式最近在深度使用OpenClaw这类本地AI代理工具时,我一直在思考一个核心问题:我们到底是在“使用”AI,还是在“被”AI使用?这个问题听起来有点哲学,但在实际工作中&#x…...
别再只盯着GNURadio了!USRP新手避坑指南:从选型、硬件连接到常见‘假砖’故障排查
别再只盯着GNURadio了!USRP新手避坑指南:从选型、硬件连接到常见‘假砖’故障排查 第一次接触USRP设备时,那种既兴奋又忐忑的心情至今记忆犹新。作为软件无线电领域的标杆硬件,USRP确实强大,但它的复杂性也足以让新手望…...
AMD Ryzen系统管理单元调试工具SMUDebugTool终极指南:免费开源硬件调节利器
AMD Ryzen系统管理单元调试工具SMUDebugTool终极指南:免费开源硬件调节利器 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. …...
解锁Windows家庭版多用户远程桌面:RDP Wrapper Library完全指南
解锁Windows家庭版多用户远程桌面:RDP Wrapper Library完全指南 【免费下载链接】rdpwrap RDP Wrapper Library 项目地址: https://gitcode.com/gh_mirrors/rd/rdpwrap 你是否正在使用Windows家庭版,却因为无法支持多用户远程桌面连接而感到困扰&…...
