包名不规范 亲人两行泪 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
Leiothrix
V2EX    程序员

包名不规范 亲人两行泪

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

    背景

    由于某种原因,也许是代码 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
    @bois1993 #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     Solana     875 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 22:32 PVG 06:32 LAX 15:32 JFK 18:32
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86