V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Leiothrix
V2EX  ›  程序员

包名不规范 亲人两行泪

  •  
  •   Leiothrix · 2019-05-19 16:08:15 +08:00 · 3210 次点击
    这是一个创建于 2017 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

    由于某种原因,也许是代码 Review 不善,也许是沟通太少,也许是开发人员代码规范意识不够,一个由很多人员协同开发的 Java 大项目下的子项目包名命名方式出现了好几种流派。假设 GroupID 为com.java,ArtifactID 为xxx,子项目里包命名至少出现了以下三种不同流派:com.Java.xxxcom.java.xxxcom.llx.xxx。Java 是不建议包名出现大写字母的,但偏偏这个大项目建立伊始的时候,负责人大笔一挥,GroupID 写成了com.Java这副鬼样子。槽点太多,竟不知从何说起。

    问题

    导致的问题:一些工具类无法愉快的进行共享了,com.Javacom.java是两个完全不同的包,我主要在 Windows 下进行开发,但是 Windows 的文件系统不区分文件夹和文件的大小写,例如Java文件夹和java文件夹是不能共存的,它会在你创建的时候询问是否将这两个文件夹合并。问题来了,跨平台系统的文件系统该如何抉择呢?典型的例子就是 Git 还有 Java 的包管理,Linux 是严格区分文件夹大小写的。配合 Spring Boot 令人窒息的组件扫描,每次调用其它模块的工具类,为注入 Bean 该选择哪个包的事情都得伤半天脑筋,感觉自己陷入了一个漩涡,心累啊。

    22 条回复    2019-05-20 18:07:30 +08:00
    sutra
        1
    sutra  
       2019-05-19 16:15:02 +08:00
    Leiothrix
        2
    Leiothrix  
    OP
       2019-05-19 16:16:53 +08:00
    @sutra 老哥我之前已经试过这个了,没啥用
    Leiothrix
        4
    Leiothrix  
    OP
       2019-05-19 16:43:35 +08:00
    @vcinex win10 有 WSL 啊
    LokiSharp
        5
    LokiSharp  
       2019-05-19 19:26:47 +08:00 via iPhone
    重构改个包名不难吧?
    719465553
        6
    719465553  
       2019-05-19 19:36:07 +08:00
    见过 com.UI, class a_b,list.add(null);for(int i = 1;;)一堆坑的路过
    boris1993
        7
    boris1993  
       2019-05-19 19:36:21 +08:00 via Android
    @LokiSharp #5 虽然这么说有点懒政的意味,但是
    改出问题你负责?你打包票改完肯定不影响原有表现?
    kassadin
        8
    kassadin  
       2019-05-19 20:44:00 +08:00
    按说有发帖的时间就够改完了,ide rename move 都是无痛的。
    怕出问题就单文件分批次操作,能出问题也就是反射、配置、maven、混淆类的字符串,业务参数总不会带包名类名还区分大小写吧。
    xuanbg
        9
    xuanbg  
       2019-05-19 21:37:39 +08:00
    改个包名还会出问题?在路径中批量查找替换,分分钟搞定。
    LokiSharp
        10
    LokiSharp  
       2019-05-19 22:38:49 +08:00
    @boris1993 #7 改个包名这种级别的重构都怕的。。。你们是没写单元测试么???
    wangyongbo
        11
    wangyongbo  
       2019-05-19 23:07:50 +08:00   ❤️ 1
    我司的安卓工程师,把 APP 的包名用 com.android 开头,导致无法上架 google play。
    NeinChn
        12
    NeinChn  
       2019-05-19 23:54:40 +08:00
    如果你的包名是在 rpc client 里面,然后给其他几十甚至上百个外部团队用的
    这种时候你还敢随便改包名么
    又不是所有应用都是简单的单 server 应用
    万一有人基于包名做反射,做 SPI,改包名没改彻底就是作大死....
    Leiothrix
        13
    Leiothrix  
    OP
       2019-05-20 00:06:05 +08:00
    @LokiSharp 现在的问题是不敢去动那些在线上跑的东西,而且模块太多,上千个类需要修改成统一的规范凭我一个人去推动怕是做不到。我尝试过用 IDEA 去批量更改包名,最后以放弃告终,明天问问主管这东西改不改吧。
    boris1993
        14
    boris1993  
       2019-05-20 00:10:35 +08:00 via Android
    @LokiSharp #9 前年,所谓”负责 QA ”的人,亲口告诉我,我们时间很紧的,没有时间预留去写单元测试
    我知道,很操蛋。我当时也差点吐血。
    但是,对于一个开发流程是先闷头写代码,文档最后补的公司,你又能期望什么呢。

    就算不考虑这些,通常来说,我也不想去碰不是我写的东西,因为我真的没把握不出问题。一旦出了问题,那就是我的锅。
    Leiothrix
        15
    Leiothrix  
    OP
       2019-05-20 00:12:18 +08:00
    @kassadin 上千个类,十几个不同功能的子项目,每个项目负责人都不同,IDE 还没智能到可以联动所有不同项目的包名一起修改。对了,还掺杂了很多 RPC 调用……
    Leiothrix
        16
    Leiothrix  
    OP
       2019-05-20 00:13:39 +08:00
    @NeinChn 对的,因为有些项目是作为微服务部署的,掺杂了很多 RPC 调用,不敢改,改也改不及,先放着。
    LokiSharp
        17
    LokiSharp  
       2019-05-20 00:19:22 +08:00
    @boris1993 #14 没单元测试的话那就别改了。。。用 WSL 吧
    zwh2698
        18
    zwh2698  
       2019-05-20 00:34:34 +08:00 via Android
    Java 的重构工具很牛逼,兄弟你不能让工具闲着。创建项目的那个傻子,一定没有丰富的多平台经验。所以你不要闲着了,受个累,让大家都爽一下
    iamdqncoder
        19
    iamdqncoder  
       2019-05-20 01:09:28 +08:00 via Android
    前人挖坑,后人跳坑
    dengtongcai
        20
    dengtongcai  
       2019-05-20 09:03:33 +08:00 via iPhone
    规范就是小写啊
    didikee
        21
    didikee  
       2019-05-20 09:09:41 +08:00 via Android
    @wangyongbo 😂这个前缀开头的是安卓系统内部应用
    unco020511
        22
    unco020511  
       2019-05-20 18:07:30 +08:00
    最怕这种,每次导包时候我还得想半天
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3596 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 11:10 · PVG 19:10 · LAX 03:10 · JFK 06:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.