当前位置: 首页 > 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.dtcms.com/a/355946.html

相关文章:

  • yolo学习笔记01——前置基础
  • 【力扣】2715. 执行可取消的延迟函数
  • 生产环境Vue组件报错:Cannot access before initialization
  • 将 agents 连接到 Elasticsearch 使用模型上下文协议 - docker
  • 前后端分离情况下,将本地vue项目和Laravel项目以及mysql放到自己的云服务器
  • 工业 5G + AI:智能制造的未来引擎
  • Mybatis-增删改查
  • 逻辑回归以及损失函数
  • 数字孪生(Digital Twin):未来产业与城市的智慧引擎
  • AI Agent从0到1:剖析Block与GSK的两种产品化落地路径
  • 容器学习04-kubernetes(k8s)
  • 海康相机开发---设备登录
  • (二分查找)Leetcode34. 在排序数组中查找元素的第一个和最后一个位置+74. 搜索二维矩阵
  • 【LInux】常用命令笔记
  • Linux之Shell编程(一)
  • 异步方法和多线程有什么区别,他们的实现逻辑是什么以及为什么异步方法: 不能和调用者在同一个类中
  • VisionPro联合编程控件导入WinFrom以及VS卡死问题
  • GCC版本和C语言标准版本的对应关系
  • 一个Demo射击小计(纯蓝图)
  • 前端学习 10-1 :验证中的UVM
  • .Net Core Web 架构(管道机制)的底层实现
  • jadx反向编译JAR包
  • 基于SQL数据库的智能问答系统设计与实现
  • Codeforces Round 1043 (Div. 3) D. From 1 to Infinity
  • 2025年9月计算机二级C++语言程序设计——选择题打卡Day9
  • 【数据分享】珠江三角洲水系地理空间全套数据集
  • x64dbg的基本调试操作 (未完,待补充)
  • 通信协议再升级,PROFINET和EtherNet IP网关迎接改造升级大挑战
  • 智慧清洁革新者:有鹿机器人自述
  • @Jenkins 介绍、部署与使用标准作业程序