当前位置: 首页 > news >正文

Maven 编译打包一个比较有趣的问题

前言

最近做项目,发现一个比较有意思的问题,其实发现了问题的根源还是很好理解,但是如果突然看到会非常的难以理解。在Java项目中,明明包名错误了,居然可以正常编译打包,IDEA报错了,但是mvn命令正常执行,且class编译完成后为正确的结果。

demo

笔者故意把java文件不按照规则的目录,随便放一个地方,IDEA提示错误,且给出正确的操作逻辑。但是我们不管他,直接编译

结果是正确的编译到指定包名的目录,非常神奇,笔者第一眼看到时,去classpath路径怎么都找不到类class,而且IDEA报错,正奇怪为啥可以编译且classpath没有类呢,然后去查看代码,突然灵感出现,去正确的路径去找,果然找到了class文件。

表现奇特的地方:

1. 明明报错了,却能正确编译

2. 明明在那个目录的类,却编译后找不到

总结

其实发现了class还是很好理解的,java文件编译成class文件,依靠的不是目录,而是文件本身,package的定义在编译后实际上也是在class字节码常量池中,通过class的定义,和引用常量池的引用

其实常用池也是引用

所以从根源上,package就是全限定名的一部分,通过目录隔离的方式方便定位的,对于class文件是非常重要的,但是对于java文件,实际上不影响编译和实际class的精确生成和定位。另外java可以编译class,但是class不一定是java编译的,所以有kt,groovy等class虚拟机运行的其他语言。

http://www.xdnf.cn/news/1383805.html

相关文章:

  • 机器视觉学习-day08-图像缩放
  • 企业如何管理跨多个系统的主数据?
  • Maven核心用法
  • 3446. 按对角线进行矩阵排序
  • [数组]27.移除元素
  • Kafka02-集群选主
  • 【Node.js从 0 到 1:入门实战与项目驱动】2.4 开发工具推荐(VS Code 、IDEA及插件、终端工具、调试工具)
  • 配置 Gitlab 和 Elasticsearch/Zoekt 并使用 Docker Metadata 数据库、Camo 代理服务
  • AI 如何 “看见” 世界?计算机视觉(CV)的核心技术:图像识别、目标检测与语义分割
  • Day16_【机器学习常见术语】
  • 宋红康 JVM 笔记 Day08|堆
  • MySQL 中 tinyint(1)、int(11)、bigint(20) 的数字到底是什么意思?
  • Vibe Coding 概念提出者 AndrejKarpathy 谈强化学习。
  • 在jdk8的spring-boot-2.7.x项目中集成logback-1.3.x
  • 通过代码认识 CNN:用 PyTorch 实现卷积神经网络识别手写数字
  • Maven 项目单元测试实战指南:从环境搭建到问题排查全解析
  • 使用astah制作专业状态图及C/C++实现解析
  • Docker 详解+示例
  • 进程组 会话 作业控制 守护进程
  • 【Canvas与盾牌】“靡不有初,鲜克有终”黄竖条盾牌
  • Redis 哨兵(Sentinel)全面解析
  • 海康相机开发---设备登录
  • Subdev与Media子系统的数据结构
  • redis单哨兵模式
  • 把 AI 塞进「智能水杯」——基于声学指纹的零样本水质检测杯
  • open webui源码分析11-四个特征之记忆
  • GD32VW553-IOT OLED移植
  • Intern-S1-mini模型结构
  • Python训练营打卡 DAY 50 预训练模型+CBAM模块
  • DQN(深度Q网络):深度强化学习的里程碑式突破