windows开发的一个诡异坑,百年一遇?

简介: 今天项目组的小朋友遇到了一个很奇怪的问题,有多奇怪,百年一遇?

今天项目组的小朋友遇到了一个很奇怪的问题

一个工程,在IDEA中运行十分正常,但是线上就是报错,报找不到类

但反编译之后明明类就在,但本地怎么运行也复现不出线上的问题,就是能正常运行

小朋友也很着急,时间也过去了不少,于是来求助我

在帮小朋友排除了一些猜测之后找到了罪魁祸首

windows的大小写不敏感

大家都知道windows是大小写不敏感的,同一个单词无论大小写都被认为是相同的东西

而linux是大小写敏感的,大小写不同被认为是两个东西

这次的问题就出在一个包名上,这个包名命名不规范,用了驼峰式的命名,包含一个大写字母

testUp

所有类中import的部分都是大写,而实际打在jar包中的目录是全小写,导致在linux这个敏感环境下就找不到这个含有大写的路径了

有人说这不是很简单的问题么,谁让大小写不一致呢,活该

那我为什么说这是百年一遇呢

原因就在于打包都是由IDE完成的,我们IDE用的是IDEA,使用maven install进行打包

理论上是不应该出现这个问题的,以前也从来没遇到过,我今天又做了很多的测试也再没复现过

真的变成了一桩悬案,有可能是在某种极其特殊的场景下的一个IDEA的BUG

写出来给大家遇到的一些疑难杂症提供一个奇葩的思路


这个事儿看来很难再找到具体原因了

不过我倒是对windows和linux对于大小写不同的态度有点儿兴趣,为什么会有这样的差异呢

抱着这个好奇心我找了找网上相关的帖子,发现很多人在开发的时候都遇到了这样的问题,特别是很多用git进行版本管理或者多人协作管理的情况加,看到的大多数人的建议是linux开发,windows查看

从直觉上来讲大小写区分好像是理所应当的,明明就是两个字母嘛,我们设密码的时候也知道大小写是不同的

那windows为什么会在文件系统这层做出一个大小写不区分的决定呢,好奇怪

这里先做一个说明,并不是FAT32或者NDFS这种存储形式不支持大小写敏感,也不是所有windows都大小写不敏感,windows的很多版本都是可以支持大小写敏感的,Server版全系列,普通版95到7都可以。Server系列通过修改文件服务的配置就可以,普通版需要修改注册表,好像唯一默认敏感的是server2000

回到windows默认不敏感这件事儿上来,通过查一些说明,似乎是从MS DOS继承下来的,至于MS DOS为什么不敏感,这个已经没有什么资料可以考证了,只是坊间传说是为了方便用户,提升用户体验

从这个侧面也能感受到,用户体验这个东西,祸福相依,有积极的一面也就一定会为之付出相应的代价

相关文章
|
14天前
|
IDE 关系型数据库 开发工具
使用Visual Basic进行Windows窗体开发
【4月更文挑战第27天】本文介绍了使用Visual Basic进行Windows窗体(WinForms)开发的步骤,从搭建开发环境到创建、设计用户界面,再到编写事件驱动的代码和数据绑定。Visual Basic结合WinForms提供了一种易学易用的桌面应用开发方案。通过调试、优化、部署和维护,开发者可以构建专业应用程序。随着技术发展,掌握最新UI设计和开发工具对于保持竞争力至关重要。本文为初学者提供了基础指导,鼓励进一步探索和学习。
|
11天前
|
前端开发 Linux iOS开发
【Flutter前端技术开发专栏】Flutter在桌面应用(Windows/macOS/Linux)的开发实践
【4月更文挑战第30天】Flutter扩展至桌面应用开发,允许开发者用同一代码库构建Windows、macOS和Linux应用,提高效率并保持平台一致性。创建桌面应用需指定目标平台,如`flutter create -t windows my_desktop_app`。开发中注意UI适配、性能优化、系统交互及测试部署。UI适配利用布局组件和`MediaQuery`,性能优化借助`PerformanceLogging`、`Isolate`和`compute`。
【Flutter前端技术开发专栏】Flutter在桌面应用(Windows/macOS/Linux)的开发实践
|
13天前
|
编解码 Linux Windows
FFmpeg开发笔记(十三)Windows环境给FFmpeg集成libopus和libvpx
本文档介绍了在Windows环境下如何为FFmpeg集成libopus和libvpx库。首先,详细阐述了安装libopus的步骤,包括下载源码、配置、编译和安装,并更新环境变量。接着,同样详细说明了libvpx的安装过程,注意需启用--enable-pic选项以避免编译错误。最后,介绍了重新配置并编译FFmpeg以启用这两个库,通过`ffmpeg -version`检查是否成功集成。整个过程参照了《FFmpeg开发实战:从零基础到短视频上线》一书的相关章节。
FFmpeg开发笔记(十三)Windows环境给FFmpeg集成libopus和libvpx
|
14天前
|
编解码 Linux Windows
FFmpeg开发笔记(十一)Windows环境给FFmpeg集成vorbis和amr
在Windows环境下,为FFmpeg集成音频编解码库,包括libogg、libvorbis和opencore-amr,涉及下载源码、配置、编译和安装步骤。首先,安装libogg,通过配置、make和make install命令完成,并更新PKG_CONFIG_PATH。接着,安装libvorbis,同样配置、编译和安装,并修改pkgconfig文件。之后,安装opencore-amr。最后,重新配置并编译FFmpeg,启用ogg和amr支持,通过ffmpeg -version检查是否成功。整个过程需确保环境变量设置正确,并根据路径添加相应库。
FFmpeg开发笔记(十一)Windows环境给FFmpeg集成vorbis和amr
|
1月前
|
Linux 编译器 C语言
FFmpeg开发笔记(二)搭建Windows系统的开发环境
在Windows上学习FFmpeg通常较困难,但通过安装预编译的FFmpeg开发包可以简化流程。首先需要安装MSYS2来模拟Linux环境。下载并执行MSYS2安装包,然后修改msys2_shell.cmd以继承Windows的Path变量。使用pacman安装必要的编译工具。接着,下载预编译的FFmpeg Windows包,解压并配置系统Path。最后,在MSYS2环境中运行`ffmpeg -version`确认安装成功。欲深入学习FFmpeg开发,推荐阅读《FFmpeg开发实战:从零基础到短视频上线》。
FFmpeg开发笔记(二)搭建Windows系统的开发环境
|
2月前
|
数据可视化 数据库 C++
Qt 5.14.2揭秘高效开发:如何用VS2022快速部署Qt 5.14.2,打造无与伦比的Windows应用
Qt 5.14.2揭秘高效开发:如何用VS2022快速部署Qt 5.14.2,打造无与伦比的Windows应用
104 0
|
5月前
|
监控 API C++
8.4 Windows驱动开发:文件微过滤驱动入门
MiniFilter 微过滤驱动是相对于`SFilter`传统过滤驱动而言的,传统文件过滤驱动相对来说较为复杂,且接口不清晰并不符合快速开发的需求,为了解决复杂的开发问题,微过滤驱动就此诞生,微过滤驱动在编写时更简单,多数`IRP`操作都由过滤管理器`(FilterManager或Fltmgr)`所接管,因为有了兼容层,所以在开发中不需要考虑底层`IRP`如何派发,更无需要考虑兼容性问题,用户只需要编写对应的回调函数处理请求即可,这极大的提高了文件过滤驱动的开发效率。
44 0
|
1月前
|
监控 安全 API
7.3 Windows驱动开发:内核监视LoadImage映像回调
在笔者上一篇文章`《内核注册并监控对象回调》`介绍了如何运用`ObRegisterCallbacks`注册`进程与线程`回调,并通过该回调实现了`拦截`指定进行运行的效果,本章`LyShark`将带大家继续探索一个新的回调注册函数,`PsSetLoadImageNotifyRoutine`常用于注册`LoadImage`映像监视,当有模块被系统加载时则可以第一时间获取到加载模块信息,需要注意的是该回调函数内无法进行拦截,如需要拦截则需写入返回指令这部分内容将在下一章进行讲解,本章将主要实现对模块的监视功能。
38 0
7.3 Windows驱动开发:内核监视LoadImage映像回调
|
5月前
|
监控 安全 API
7.2 Windows驱动开发:内核注册并监控对象回调
在笔者上一篇文章`《内核枚举进程与线程ObCall回调》`简单介绍了如何枚举系统中已经存在的`进程与线程`回调,本章`LyShark`将通过对象回调实现对进程线程的`句柄`监控,在内核中提供了`ObRegisterCallbacks`回调,使用这个内核`回调`函数,可注册一个`对象`回调,不过目前该函数`只能`监控进程与线程句柄操作,通过监控进程或线程句柄,可实现保护指定进程线程不被终止的目的。
31 0
7.2 Windows驱动开发:内核注册并监控对象回调
|
5月前
|
监控 安全 API
7.6 Windows驱动开发:内核监控FileObject文件回调
本篇文章与上一篇文章`《内核注册并监控对象回调》`所使用的方式是一样的都是使用`ObRegisterCallbacks`注册回调事件,只不过上一篇博文中`LyShark`将回调结构体`OB_OPERATION_REGISTRATION`中的`ObjectType`填充为了`PsProcessType`和`PsThreadType`格式从而实现监控进程与线程,本章我们需要将该结构填充为`IoFileObjectType`以此来实现对文件的监控,文件过滤驱动不仅仅可以用来监控文件的打开,还可以用它实现对文件的保护,一旦驱动加载则文件是不可被删除和改动的。
31 1
7.6 Windows驱动开发:内核监控FileObject文件回调

热门文章

最新文章