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

技术老大对开发闭源了基础库,打算自己写一套代替

  •  
  •   yyyyda · 2021-07-07 14:54:15 +08:00 · 10143 次点击
    这是一个创建于 1265 天前的主题,其中的信息可能已经有所发展或是发生改变。

    公司两个后端项目公用一个基础库,技术老大从之前项目中抽出来的,然后闭源了(他还在公司)。。。只给 jar 包,没有代码,也没有文档,现在开发起来很 tm 蛋疼,像吃了苍蝇一样。

    具体内容包括数据库访问,授权验证,http 服务器,程序启动和销毁等等,想改点东西都得通过他,比如想加个 log,记一下所有的 http 访问记录,只有在他的库里才能改。

    这不只是一个技术问题,涉及到公司和技术老大之间的一堆事。

    现在小弟在考虑通过技术手段解决,自己写一遍,尽量少动业务,去掉他的库,在考虑 Spring,但是没有相关的经验,各位有没有推荐的 spring 相关项目可以参考一下?或者有没有类似的经历交流交流?

    这个库大概包括:

    1. 数据库访问、查询
    2. http 服务器
    3. 授权验证
    4. 用户系统
    5. tcp 模块
    6. 一些自己封装的工具函数,处理字符串、文件等(基本就是 Apache commons 再套一层)

    公司现在的技术栈是 kotlin,mysql,jdbc, http 服务器用的 javalin,没上大框架。他的库不知道多少代码,估计大概一万行左右

    第 1 条附言  ·  2021-07-08 10:58:13 +08:00
    确实不是个技术问题。不过我还是不太明白他为啥这么搞我,之前项目就我们两个后端,三成是我写的,七成是他写的,结果搞得我现在像个局外人,很多东西根本没法改。而且现在他转项目了,现在就剩我一个后端。不给代码仓库权限,不给文档就算了,jar 包也不给个 sources 包,真 人上人。Apache commons 不比他的吊库牛逼,人家也没像他这样。他的库 Kotlin 写的,class 文件反编译出来的 java 看起来比较费劲,尤其是在用一些 kotlin 特性的时候,比如 inline,reified 这些,不过也好,就当学习了。
    打算转项目了,不想受这鸟气
    73 条回复    2021-07-21 13:51:30 +08:00
    bl
        1
    bl  
       2021-07-07 14:58:58 +08:00
    把他的库去掉,哪里报错改哪里
    duduaba
        2
    duduaba  
       2021-07-07 15:02:05 +08:00   ❤️ 13
    你都说了他是老大,所以当你这个库写成之时,也就是你离开之日。
    yousabuk
        3
    yousabuk  
       2021-07-07 15:03:02 +08:00 via iPhone
    不要这么干
    SilencerL
        4
    SilencerL  
       2021-07-07 15:03:32 +08:00   ❤️ 4
    大吃一惊.jpg
    劳动合同里面没写类似“在司期间所有产出均属公司所有”之类的条款吗,没离职就搞这出,离职岂不是还能在里面偷偷加屎?
    keepeye
        5
    keepeye  
       2021-07-07 15:03:48 +08:00
    自己开个分支出来慢慢改,哪里报错换哪里
    falcon05
        6
    falcon05  
       2021-07-07 15:06:37 +08:00 via iPhone
    别这样,损人害己
    wangkun025
        7
    wangkun025  
       2021-07-07 15:06:44 +08:00
    活久见。
    fiypig
        8
    fiypig  
       2021-07-07 15:07:09 +08:00
    不要自己改, 只能找他,除非他走了
    还有他这么操作,也差不多也走了吧
    huangmingyou
        9
    huangmingyou  
       2021-07-07 15:12:42 +08:00
    大公司里面,源代码不是谁都能全部浏览吧。当初这么搞,肯定是出于安全考虑。
    yaoliyc
        10
    yaoliyc  
       2021-07-07 15:13:23 +08:00
    jar 做了加密吗?不然反编译一下都看到了。而且这也不是单纯的技术问题。
    wolfie
        11
    wolfie  
       2021-07-07 15:27:40 +08:00
    跟 spring 没关系,就是基础工具,一般轮子 hutool 基本有。
    murmur
        12
    murmur  
       2021-07-07 15:28:37 +08:00
    http 服务器,这个东西也要写库的意义何在
    jzphx
        13
    jzphx  
       2021-07-07 15:31:16 +08:00
    神仙打架别凑热闹
    yukiww233
        14
    yukiww233  
       2021-07-07 15:32:07 +08:00   ❤️ 1
    jar 相当于开源;
    如果只是简单改一些东西注入一些东西的话, 相同路径本地写一份覆盖掉 jar 里的 class 就好
    EPr2hh6LADQWqRVH
        15
    EPr2hh6LADQWqRVH  
       2021-07-07 15:33:07 +08:00
    以后开公司机器自带 cron job 每半分钟运行 killall java 杜绝此类问题
    zhuweiyou
        16
    zhuweiyou  
       2021-07-07 15:33:39 +08:00
    他是老大 当然听他的
    dadaoqueyi
        17
    dadaoqueyi  
       2021-07-07 15:35:49 +08:00
    现成的甩锅对象,有问题就找他不是挺好的嘛。我做的就是平台封装的活,不知道被甩了多少锅,纯粹吃力不讨好,特别是稍微懂一点技术的人。小白还好不懂就老老实实的按照封装的搞。不过不给文档就过分了,源码没放开公司自己有考量的。
    Tink
        18
    Tink  
       2021-07-07 15:36:24 +08:00 via Android
    没这么干的吧也能当
    vevlins
        19
    vevlins  
       2021-07-07 15:50:26 +08:00   ❤️ 5
    他闭源的目的不是不让你们用,而是不让你们改,甚至于可能想加强对这里的管理,希望以后方案是他来拟定。

    搞清楚这一点很重要。如果你自己搞一套,他的目的就达不到了,你跟老板就是在唱反调。如果你的目的就是唱反调,那就做,否则还是不要的好。
    qW7bo2FbzbC0
        20
    qW7bo2FbzbC0  
       2021-07-07 15:52:13 +08:00
    @murmur #12 我猜可能是自定义 cookies,设置特殊 header,dto 序列化反序列化
    nicholasxuu
        21
    nicholasxuu  
       2021-07-07 16:03:13 +08:00
    好像法律上,(在公司的时间)用公司的电脑,做出的东西,都是属于公司的知识产权,他是没法据为己有的。
    而且即使是闭源了的开源库,也可以继续使用之前的开源版本呀,自己更新就行了。
    LS 有人说了,估计是只是不希望谁都可以改,这个很正常的。不然谁都能改功能,改完还得他来维护,出问题了他得负责。
    ApmI00
        22
    ApmI00  
       2021-07-07 16:27:12 +08:00
    这摆明就是不让修改而已,就是给用而不是给改的。还要加日志打印。。。难道平时使用使用 jdk 自带的类,也改源码,添加日志输出,然后再打包编译使用?当然,没有文档是蛋疼,这个可以诉求。加日志输出,jdk 的动态代理,或者干脆静态代理,就可以吧。
    ApmI00
        23
    ApmI00  
       2021-07-07 16:29:53 +08:00   ❤️ 1
    @nicholasxuu 楼主讲的闭源,跟开源项目的,一点关系都没有,就是只提供 jar 包使用,而不是把工具源码的放业务项目一起编译而已。
    jorneyr
        24
    jorneyr  
       2021-07-07 16:31:24 +08:00
    需要啥,提需求即可,莫动手
    Lonely
        25
    Lonely  
       2021-07-07 16:35:01 +08:00 via iPhone
    年轻人不要太气盛(狗头)
    wfd0807
        26
    wfd0807  
       2021-07-07 16:54:09 +08:00
    这个基础库的意义是什么?
    qwerthhusn
        27
    qwerthhusn  
       2021-07-07 17:01:16 +08:00   ❤️ 2
    只要没加密,就很简单

    假如你想临时改他写的一个类 a.b.c.D 的内容。
    你在工程下建一个 a/b/c/的文件夹,把 D 类反编译的代码放进去。直接改内容。。

    这时候程序启动时,加载到这个类的时候会直接加载你魔改过的,而忽略 jar 包里面的
    IvanLi127
        28
    IvanLi127  
       2021-07-07 17:04:15 +08:00
    用着就是了,如果不想通过他的库 你给自己开个旁路,把你的代码走这旁路就好了,去掉不可取,出事了你就是背锅侠
    Vindroid
        29
    Vindroid  
       2021-07-07 17:10:29 +08:00   ❤️ 1
    核心库做权限限制没问题,有需求由 PM 提给技术大佬来变动,问题是文档都没有,这应该算是大佬的私心了
    undef404
        30
    undef404  
       2021-07-07 17:10:40 +08:00
    这不是很正常的事么。不可能所有人都看到公司的所有代码。
    TuringGunner
        31
    TuringGunner  
       2021-07-07 18:09:19 +08:00
    多好的摸鱼理由啊,何必自己增加背锅机会呢
    muunala10221
        32
    muunala10221  
       2021-07-07 18:39:25 +08:00
    你闲的??
    darknoll
        33
    darknoll  
       2021-07-07 19:04:01 +08:00
    不让你看是怕你发现他其实没写多少都是抄的
    hs0000t
        34
    hs0000t  
       2021-07-07 19:11:23 +08:00 via Android   ❤️ 4
    记住,这不是个技术问题
    4771314
        35
    4771314  
       2021-07-07 19:39:08 +08:00
    @vevlins 如果是加强项目管理,那直接用 git 的一套不就可以了,这人明显是搞事情
    没有源码是可以接受的,但是没有文档这个问题就很大了,让他提供文档和相应的用例,不然对着一个黑盒,那真的很难受
    chenqh
        36
    chenqh  
       2021-07-07 19:42:50 +08:00
    摸鱼不爽码?
    liuhuansir
        37
    liuhuansir  
       2021-07-07 19:53:12 +08:00
    这个不算闭源吧,这就相当于二方库,只不过他应该要提供文档
    wqtacc
        38
    wqtacc  
       2021-07-07 20:30:25 +08:00   ❤️ 2
    这不就是大佬封装好了基础组件,不让看不让改么,作为普通员工按要求用就是了;哪里不知道就问大佬啊
    oneisall8955
        39
    oneisall8955  
       2021-07-07 23:15:59 +08:00 via Android
    封装的问题,他写的 sdk 没有暴露接口,提供自定义实现,或者没有 before/after 钩子暴露
    inframe
        40
    inframe  
       2021-07-08 00:05:17 +08:00
    不如 jd GUI 直接看看反编译的源代码?
    dayeye2006199
        41
    dayeye2006199  
       2021-07-08 01:48:53 +08:00
    10 分钟一条消息问这个借口怎么用,那个借口怎么用。直到人家忍不住说 “你 tm 不会看文档 /源码”。。。
    ericgui
        42
    ericgui  
       2021-07-08 02:03:12 +08:00
    这肯定是有问题的
    HENQIGUAI
        43
    HENQIGUAI  
       2021-07-08 07:19:28 +08:00
    非技术问题不要用技术解决。
    xcstream
        44
    xcstream  
       2021-07-08 07:54:29 +08:00
    为什么要写一套,这是个问题
    xuanbg
        45
    xuanbg  
       2021-07-08 08:05:25 +08:00
    楼主你要重写一套的话,前提是你老大不再是你老大。否则就别给自己找麻烦了。
    yolee599
        46
    yolee599  
       2021-07-08 08:54:54 +08:00 via Android
    不要这么干,除非这代码涉及敏感操作,否则他的源码有义务给你,因为这是公司的不是他个人的
    Leonard
        47
    Leonard  
       2021-07-08 09:26:32 +08:00
    不要试图用技术来解决非技术问题
    kop1989
        48
    kop1989  
       2021-07-08 09:27:28 +08:00
    你去工地搬砖的时候,难道你也要偷偷换成自己的烧的砖嘛?理由就是别人窑厂烧的砖你看不惯?
    sagaxu
        49
    sagaxu  
       2021-07-08 09:28:17 +08:00 via Android   ❤️ 2
    小农思想
    play78
        50
    play78  
       2021-07-08 09:35:43 +08:00
    风险控制啊。
    核心代码闭源,在稍微上规模的公司,这不是很常见的吗?不然哪天员工就给泄漏出去了。
    每个员工都能知道 WX 的登录逻辑? ZFB 支付逻辑?
    没有文档,有个 demo,你直接调用就可以了。有问题直接找他。
    Marszm
        51
    Marszm  
       2021-07-08 10:29:24 +08:00
    区区 jar 包。。加密了么?没加密不等于开源?
    Marszm
        52
    Marszm  
       2021-07-08 10:32:00 +08:00
    还有就是,公司内部不存在开源闭源。。。都是闭源。。我能改你们公司代码才叫做开源。
    chengkai1853
        53
    chengkai1853  
       2021-07-08 10:32:32 +08:00
    感觉你想当老大
    icyalala
        54
    icyalala  
       2021-07-08 10:35:46 +08:00
    allanpk716
        55
    allanpk716  
       2021-07-08 10:45:27 +08:00 via iPhone
    基础库,公司内部闭源的原因基本是想让大家不要瞎折腾,用一个稳定的,有问题统一改,有需求就提。你都说没相关经验,正好说明公司的决定是正确的,别瞎折腾。文档不全就反馈,而不是重做一个轮子。

    以后有机会你带新人的时候,你可以想一下为啥要强制用统一的基础库的。
    xumng123
        56
    xumng123  
       2021-07-08 10:49:34 +08:00 via iPhone
    平台—中台—业务代码,公司有大的考虑,可以反馈但别这么干
    xingzw
        57
    xingzw  
       2021-07-08 14:12:48 +08:00
    情商堪忧
    FanError
        58
    FanError  
       2021-07-08 14:27:55 +08:00
    我们公司基础库也是这样弄的,封装成 jar 包,放在私有 maven 上。。

    方便分发到其它项目( 5,6 个)。。
    yunshansimon
        59
    yunshansimon  
       2021-07-08 14:38:57 +08:00
    既然用 java,用反射可以改任何东西,不用源代码吧。用好反射,就是神也不能阻止你在运行时更改他的函数。
    gefranks
        60
    gefranks  
       2021-07-08 14:45:19 +08:00
    现在弄得项目也有个类似这样的引用了 ar 包,看上去是公司里人自己写的,但是文档没有,源代码也没有. 就算有也不想去改了。
    现在用这个的就是八仙过海各显神通了,能凑合用的就用,不能凑合用就另起炉灶了
    back0893
        61
    back0893  
       2021-07-08 14:58:50 +08:00
    文档都没咋个写..
    windyboy
        62
    windyboy  
       2021-07-08 15:07:03 +08:00
    很多不知深浅的搞 java 的,动不动就是自己写什么基础库
    还让所有项目继承来用,根本不考虑长期的运维问题
    一塌糊涂
    jiyinyiyong
        63
    jiyinyiyong  
       2021-07-08 15:26:22 +08:00
    > 而且现在他转项目了,现在就剩我一个后端。不给代码仓库权限,不给文档就算了,jar 包也不给个 sources 包

    不明觉厉, 转到其他项目了不给权限? 意味着后端这个包如果有 bug 还没人改了? 老板还默认这种情况的吗...
    bthulu
        64
    bthulu  
       2021-07-08 15:33:41 +08:00
    @allanpk716 这里有个最麻烦的问题在于, 当闭源基础库是领导写的, 同时这个领导已经高升不再写代码了, 这个时候有 issue 要改, 要加功能那就基本不可能了. 基于办公室政治原因, 没人敢让领导去改代码, 更没人敢说领导代码写的不好, 所有的 bug 最后都变成了 feature, 屎山就这么来了
    oldmanong
        65
    oldmanong  
       2021-07-08 16:10:04 +08:00 via iPhone
    既然楼主这么想造反,那就试试嘛,万一成功了呢,你就是技术老大了
    cw2k13as
        66
    cw2k13as  
       2021-07-08 17:17:19 +08:00
    @keepeye 不审题,都说了闭源只给 jar 包
    kwanzaa
        67
    kwanzaa  
       2021-07-08 17:20:31 +08:00
    有能力就自己写
    janus77
        68
    janus77  
       2021-07-08 17:51:12 +08:00
    springboot 一套,网上全是开源项目
    LDa
        69
    LDa  
       2021-07-09 10:31:52 +08:00
    这么良心的老大哪里找,锅可以甩的飞起
    37Y37
        70
    37Y37  
       2021-07-09 16:20:26 +08:00
    emm...老大这思想
    allanpk716
        71
    allanpk716  
       2021-07-10 09:19:46 +08:00
    @bthulu 如果考虑办公室 ZZ 问题,那么建议看形势不对就撤吧,因为你们不敢提 issues 已经恶性循环,和自己偷偷造轮子应该也是会被锤的 doge
    bthulu
        72
    bthulu  
       2021-07-10 10:57:55 +08:00
    @allanpk716 已经被直属锤过一次了, 但是大领导的包实在是难用, 我现在学聪明了, 把大领导的包改了后, 改个超低版本号上传上去. 然后引这个低版本的 jar 包就行了.
    MidCoder
        73
    MidCoder  
       2021-07-21 13:51:30 +08:00
    这个库纯属你们老大闲的没事,没有任何技术含量。
    数据库访问不管是 spring 现有的框架 spring jdbc 还是 mybatis 都已经很完善,没有必要自己再去造轮子,
    http 服务器这个是啥意思?自己做了一个 tomcat ?还是 nginx?如果是,那这个轮子太重了,闲的蛋疼,如果是一个统一的 springmvc 包装,这也是闲的蛋疼,没事找事。
    授权签证,这个不管是 spring 的 security 还是 shiro,结合 oauth 规范,这个也没必要再造一个轮子;
    卧槽,为啥用户系统还做成了一个框架或者工具?这明显是一个业务,业务就要好好的去写业务,没必要在搞一个这个东西
    TCP 现在一大堆网络框架,为啥自己写?你能比 netty 牛逼?如果是这样,那他现在也不应该还在你的公司,早就名声在外了。
    综上所述,你们公司太卷了,而且卷的一点技术含量都没有,来我们这边[狗头]
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1170 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 18:24 · PVG 02:24 · LAX 10:24 · JFK 13:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.