背景
由于某种原因,也许是代码 Review 不善,也许是沟通太少,也许是开发人员代码规范意识不够,一个由很多人员协同开发的 Java 大项目下的子项目包名命名方式出现了好几种流派。假设 GroupID 为com.java
,ArtifactID 为xxx
,子项目里包命名至少出现了以下三种不同流派:com.Java.xxx
、com.java.xxx
、com.llx.xxx
。Java 是不建议包名出现大写字母的,但偏偏这个大项目建立伊始的时候,负责人大笔一挥,GroupID 写成了com.Java
这副鬼样子。槽点太多,竟不知从何说起。
问题
导致的问题:一些工具类无法愉快的进行共享了,com.Java
和com.java
是两个完全不同的包,我主要在 Windows 下进行开发,但是 Windows 的文件系统不区分文件夹和文件的大小写,例如Java
文件夹和java
文件夹是不能共存的,它会在你创建的时候询问是否将这两个文件夹合并。问题来了,跨平台系统的文件系统该如何抉择呢?典型的例子就是 Git 还有 Java 的包管理,Linux 是严格区分文件夹大小写的。配合 Spring Boot 令人窒息的组件扫描,每次调用其它模块的工具类,为注入 Bean 该选择哪个包的事情都得伤半天脑筋,感觉自己陷入了一个漩涡,心累啊。
![]() | 1 sutra 2019-05-19 16:15:02 +08:00 试试这个让 Windows 也区分大小写 https://blog.walterlv.com/post/case-sensitive-in-windows-file-system.html |
![]() | 3 Ultraman 2019-05-19 16:19:31 +08:00 via Android ![]() |
![]() | 5 LokiSharp 2019-05-19 19:26:47 +08:00 via iPhone 重构改个包名不难吧? |
![]() | 6 719465553 2019-05-19 19:36:07 +08:00 见过 com.UI, class a_b,list.add(null);for(int i = 1;;)一堆坑的路过 |
7 boris1993 2019-05-19 19:36:21 +08:00 via Android @LokiSharp #5 虽然这么说有点懒政的意味,但是 改出问题你负责?你打包票改完肯定不影响原有表现? |
8 kassadin 2019-05-19 20:44:00 +08:00 按说有发帖的时间就够改完了,ide rename move 都是无痛的。 怕出问题就单文件分批次操作,能出问题也就是反射、配置、maven、混淆类的字符串,业务参数总不会带包名类名还区分大小写吧。 |
![]() | 9 xuanbg 2019-05-19 21:37:39 +08:00 改个包名还会出问题?在路径中批量查找替换,分分钟搞定。 |
![]() | 11 wangyongbo 2019-05-19 23:07:50 +08:00 ![]() 我司的安卓工程师,把 APP 的包名用 com.android 开头,导致无法上架 google play。 |
![]() | 12 NeinChn 2019-05-19 23:54:40 +08:00 如果你的包名是在 rpc client 里面,然后给其他几十甚至上百个外部团队用的 这种时候你还敢随便改包名么 又不是所有应用都是简单的单 server 应用 万一有人基于包名做反射,做 SPI,改包名没改彻底就是作大死.... |
13 Leiothrix OP @LokiSharp 现在的问题是不敢去动那些在线上跑的东西,而且模块太多,上千个类需要修改成统一的规范凭我一个人去推动怕是做不到。我尝试过用 IDEA 去批量更改包名,最后以放弃告终,明天问问主管这东西改不改吧。 |
14 boris1993 2019-05-20 00:10:35 +08:00 via Android @LokiSharp #9 前年,所谓”负责 QA ”的人,亲口告诉我,我们时间很紧的,没有时间预留去写单元测试 我知道,很操蛋。我当时也差点吐血。 但是,对于一个开发流程是先闷头写代码,文档最后补的公司,你又能期望什么呢。 就算不考虑这些,通常来说,我也不想去碰不是我写的东西,因为我真的没把握不出问题。一旦出了问题,那就是我的锅。 |
15 Leiothrix OP @kassadin 上千个类,十几个不同功能的子项目,每个项目负责人都不同,IDE 还没智能到可以联动所有不同项目的包名一起修改。对了,还掺杂了很多 RPC 调用…… |
18 zwh2698 2019-05-20 00:34:34 +08:00 via Android Java 的重构工具很牛逼,兄弟你不能让工具闲着。创建项目的那个傻子,一定没有丰富的多平台经验。所以你不要闲着了,受个累,让大家都爽一下 |
![]() | 19 iamdqncoder 2019-05-20 01:09:28 +08:00 via Android 前人挖坑,后人跳坑 |
![]() | 20 dengtongcai 2019-05-20 09:03:33 +08:00 via iPhone 规范就是小写啊 |
![]() | 21 didikee 2019-05-20 09:09:41 +08:00 via Android @wangyongbo 这个前缀开头的是安卓系统内部应用 |
![]() | 22 unco020511 2019-05-20 18:07:30 +08:00 最怕这种,每次导包时候我还得想半天 |