一个 Spring Boot 应用的 jar 包竟然要一百多兆?这就是我接手的项目 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qwerthhusn
V2EX    Java

一个 Spring Boot 应用的 jar 包竟然要一百多兆?这就是我接手的项目

  •  1
     
  •   qwerthhusn 2020-08-26 10:25:41 +08:00 7694 次点击
    这是一个创建于 1879 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Redis

    spring-data-redis,spring-data-reactive-redis,Lettuce,Redisson,Jedis 的依赖都有,项目中用的是自己实际封装的 jedis,用途也不复杂。Spring Actuator 好像会检查 Rdistribution 连接,是用的 spring-data-redis 的连接检查的,但是因为配置的是自己实际封装的 jedis,所以每次启动都会有 WARN 错误,堆栈一大堆。

    MySQL

    spring-boot-jpa,mybatis-plus,mysql-jdbc, mariadb-jdba, sqlserver-jdbc 的依赖都有,HirakiCP,ali 的 druid,commmons-dbcp,最后项目中的 DataSource 用的是自己实际封装的 druid,配置文件以二十行。

    JSON

    json-lib fastjson gson 依赖一应俱全

    Log

    log4j1 logback commons-logging (没错,不是 Spring Boot 的那个代理成 slf4j 的 commons-logging ) slf4j 依赖一应俱全,有的代码还在用 log4j 1 的 api 。

    pom.xml

    dependencies 部分,好几十个,各种 exclude 眼花缭乱。关键是有些依赖中央库没有,也没私服,问了,说给你一个本地仓库,指过去就行了,然后去下载上 G 的本地仓库备份 build plugins 部分,各种插件,有用的没用的

    Spring Config

    没错 @Configuration,xml 都有,入口类上面一大坨注解去 @ImportResource

    Controller 类

    入参是 HttpServletRequest,自己去取数据

    代码

    不说了。System.out.println(),e.printStackTrace()满天飞

    没错,这就是我接手的项目,而且还只是指提供接口的新项目。

    48 条回复    2020-09-01 15:22:05 +08:00
    aragakiyuii
        1
    aragakiyuii  
       2020-08-26 10:38:01 +08:00
    太惨了。。
    chendy
        2
    chendy  
       2020-08-26 10:44:49 +08:00
    还行,也就一般屎
    zhaorunze
        3
    zhaorunze  
       2020-08-26 10:48:27 +08:00
    还行吧,我最近接手一个 spring3+jsp 五年前的 项目,项目中还用到了两种 mq,redis+memcache,spring 事件,mongo+mysql,三种 json
    zhuweiyou
        4
    zhuweiyou  
       2020-08-26 10:54:53 +08:00   4
    照常发工资就行,再烂我都能接手。
    qwerthhusn
        5
    qwerthhusn  
    OP
       2020-08-26 10:59:23 +08:00
    在屎上雕花雕久了,感觉自己慢慢的也不嫌臭啦
    MozzieW
        6
    MozzieW  
       2020-08-26 11:01:31 +08:00
    搭车问一下, 正常一个简单的 API 项目应该多大? 上次用开源做了一个 API, 一打包好像就 50M 左右了
    luckyrayyy
        7
    luckyrayyy  
       2020-08-26 11:01:56 +08:00   1
    一百多兆不算大..
    optimistic
        8
    optimistic  
       2020-08-26 11:14:44 +08:00
    仿佛看到了自己手上这坨屎
    shuigui
        9
    shuigui  
       2020-08-26 11:20:22 +08:00
    恶臭
    kingfalse
        10
    kingfalse  
       2020-08-26 11:24:43 +08:00 via Android
    纯粹的为了用而用,垃圾项目
    spacebound
        11
    spacebound  
       2020-08-26 11:24:48 +08:00
    一百多兆还正不真算大,顺便创个项目,必要的包引一下就奔着 50m 去了
    Heroininu
        12
    Heroininu  
       2020-08-26 11:33:42 +08:00
    100m 都觉得大吗,又不是 14 年
    qwerthhusn
        13
    qwerthhusn  
    OP
       2020-08-26 11:40:51 +08:00
    @Heroininu
    @spacebound
    @MozzieW
    @luckyrayyy
    项目就是个 CRUD 项目,没有大资源,全是 class 和文本文件,一般也就四五十兆(我对比了之前的)。

    再说一个第三方 jar,1M 的都算是已经比较大的了,很多都是几百 k 甚至几十 k
    imxthd
        14
    imxthd  
       2020-08-26 11:43:34 +08:00   1
    e.printStackTrace() 对比 log.error 有什么不好?
    arthas2234
        15
    arthas2234  
       2020-08-26 11:43:59 +08:00
    之前我们有个项目 90 兆左右,也是引用了很多没用的依赖,被我砍到 56 兆
    zliea
        16
    zliea  
       2020-08-26 11:46:21 +08:00   1
    spring 2.3 支持 docker layer 构建之后再也不担心大小了。
    yiyi11
        17
    yiyi11  
       2020-08-26 11:47:39 +08:00 via Android   1
    养蛊
    chendy
        18
    chendy  
       2020-08-26 11:54:36 +08:00
    @imxthd #14 和 ‘System.out.print 对比 log.info 有什么不好’ 一样的道理
    JDog
        19
    JDog  
       2020-08-26 11:55:08 +08:00   3
    "新人和老人的区别就是面对一坨屎山,新人会大吃一斤。老人会贤淑的避开最臭的那部分屎,然后灵巧的在保证屎山不垮的情况下把自己的屎再拉一层上去"
    via @est
    gdtdpt
        20
    gdtdpt  
       2020-08-26 11:58:15 +08:00
    我公司里现在所有项目差不多都这样,我不想鄙视谁,但是天天看着他们得过且过,这里复制一下那里粘贴一下,从来不会想去弄明白为什么,真的很气。
    itechify
        21
    itechify &nbp;
    PRO
       2020-08-26 11:58:30 +08:00   1
    前后端没分离的 200M 都见过,分离后体积小很多,几十 M 一般
    echo1937
        22
    echo1937  
       2020-08-26 11:58:30 +08:00
    这不是体积大小的问题,我接手的时候,都喜欢把冗余无用的依赖和配置尽可能地裁剪掉。
    cnxiaowen
        23
    cnxiaowen  
       2020-08-26 12:02:56 +08:00 via Android   1
    正好你慢慢优化 多好呀
    zhouyou457
        24
    zhouyou457  
       2020-08-26 12:15:09 +08:00
    我手上现在这个用了 10 多年的项目包含了 strust1,strust2 和 jfinal 三个框架...其他的框架插件就数不胜数了...

    但是打包出来的 war 包也就 80 多 M...

    有人可能会问,为啥不重构啊?
    答:老板不让重构,原因是牵扯了一大堆的系统,真正的牵一发而动全身...
    deplives
        25
    deplives  
       2020-08-26 12:16:49 +08:00
    说不来你可能不信,我上周刚打包了一坨 500M 的屎
    crclz
        26
    crclz  
       2020-08-26 12:23:01 +08:00
    刚刚创建项目,就直接 50M+了。.Net 也在这个量级。但这个大小也没什么不妥。
    sampeng
        27
    sampeng  
       2020-08-26 12:40:20 +08:00 via iPhone
    哦。我们最大的 500…
    realpg
        28
    realpg  
    PRO
       2020-08-26 13:11:22 +08:00
    无数据库无存储服务器要求扩容硬盘
    因为 opt 目录下全是
    xxx20080103.jar
    xxx20080213.jar
    xxx20080213-2.jar
    xxx20080213-3.jar
    导致硬盘空间不足
    lichengzhang2005
        29
    lichengzhang2005  
       2020-08-26 13:33:49 +08:00
    服务器真不缺那点空间,一般是先加上再说;我们 php 项目都能搞个几百 M,见怪不怪了。
    smilekung
        30
    smilekung  
       2020-08-26 13:36:21 +08:00
    我司有个后台项目 700m 我第一天来的时候都惊呆了
    tuboshuv1
        31
    tuboshuv1  
       2020-08-26 13:39:26 +08:00   1
    我们这边一个项目一个 G
    atonku
        32
    atonku  
       2020-08-26 13:41:18 +08:00
    我觉得挺好的呀,nibuzhizu
    unco020511
        33
    unco020511  
       2020-08-26 14:42:26 +08:00
    这还能接受吧我觉得,起码是前后端分离,我最开始在公司转 java 的时候,让我接手 jsp 的项目,这年代居然还有 jsp?(不过我做 java 也是新手)
    Heroininu
        34
    Heroininu  
       2020-08-26 14:43:47 +08:00
    @qwerthhusn 仔细看了一下你说的内容,的确是多了很多不必要的东西,但是项目运行稳定就足够了,可能不同的人经手有不同的使用习惯加了很多不必要的东西吧。历史包袱重的项目都是这样
    zhuangzhuang1988
        35
    zhuangzhuang1988  
       2020-08-26 14:50:26 +08:00
    屎山?小公司的祖传代码才可以叫做屎山。大公司的祖传代码,那是屎海上漂浮的僵屎山。你就在这屎海里面漂着,一旦进来了,就出不去了。每天的工作,就是在粪泳前进。还有拉着部门的粪船前进。各个部门的粪船每天继续产出新鲜的屎,投放到屎海里,它们不断聚集,成为新的屎山。旧的屎山顺着洋流还相互亲热着,迸发出岩浆般热情的屎,掉落在你头上和身边。你不得不一边拼命地游以自保、一边还想尽办法地不沾太多屎到身上。系在你身后的是部门的大船,部门领导坐在船上,用伞和棍子推着避免撞上屎山。偶尔有个负责的领导,还会愿意让你上上船休息。可惜一旦你沾着太多的屎了,或者让船沾着太多的屎了,就等着被踢下船去吧。偶尔有那心有抱负的人,尝试着改变这一切。他们以为找到了一些仿佛可以容易对付的屎山,想着要重构,说他们看到了一条干净的出路。但是,他们还是太年轻了。因为,他们看到的,只是屎山的一角。他们带着部门的船从旁边划过,却不知这就是昨日的泰坦尼克。

    作者:知乎用户
    链接: https://www.zhihu.com/question/272065178/answer/569614223
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    zhuangzhuang1988
        36
    zhuangzhuang1988  
       2020-08-26 14:52:53 +08:00
    你面对一个巨大的屎山。有的块都发黑变硬了,也有的还新鲜带虾仁的。不要试图了解都是谁拉的他们吃了什么。新需求就撇条新的垛上去。旧 bug 就试试自己拉泡稀的把旧的粘起来拍打拍打能用就行。不要试图去 refactor 什么,敲开硬壳子可能溢出旁边那坨的芯,窟窿越捅越大。什么设计模式代码风格也不用多在意,山上什么样的都有。不行就上手捏出需要的形状 hardcode 。

    作者:知乎用户
    链接: https://www.zhihu.com/question/272065178/answer/569282825
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    bruce0
        37
    bruce0  
       2020-08-26 14:53:52 +08:00
    我们的一个 go 的项目,引入了一些第三方包,出去文档啥的,差不多 500M 左右
    其中有一个夸张的文件 1.8w 行
    zhady009
        38
    zhady009  
       2020-08-26 15:08:27 +08:00
    @lichengzhang2005 我想楼主吐槽的不是大小的问题, 一个项目引用各种重复功能的依赖 配置方式不统一
    benlyons
        39
    benlyons  
       2020-08-26 16:06:08 +08:00
    我刚接手的也 150M 了, 真的是屎, 注释和文档像开玩笑, 感觉每天都在吃屎. 但是没办法了, 领导逼得紧, 我也只能接着拉了.
    knva
        40
    knva  
       2020-08-26 16:37:33 +08:00
    你接下来的任务就是找个没人的地方继续拉屎
    securityCoding
        41
    securityCoding  
       2020-08-26 16:51:25 +08:00
    @bruce0 我还想说 go 呢... 233
    zr8657
        42
    zr8657  
       2020-08-26 17:17:40 +08:00   1
    理解屎山(×)
    修改屎山(××)
    重置屎山(活在梦里)
    屎山加屎(√)
    kaedea
        43
    kaedea  
       2020-08-26 17:59:08 +08:00 via Android
    中国式敏捷。
    bytesmith
        44
    bytesmith  
       2020-08-27 08:38:48 +08:00 via iPhone
    见怪不怪了,看多了就习惯了,告诫自己别那么做
    oneoy
        45
    oneoy  
       2020-08-27 10:03:02 +08:00
    用 netty 将会减少一半的大小
    lzk50136
        46
    lzk50136  
       2020-08-27 13:45:46 +08:00 via Android
    见怪不怪…
    chillingkitten
        47
    chillingkitten  
       2020-08-29 13:16:36 +08:00
    我公司自己有伙人搞架构,自己搞了个 xxx-starter,要求项目必须用。 光把架子搭起就 100M 往上走了, 自己试图去 exclude 一些东西还会有莫名其妙的错误
    ksice
        48
    ksice  
       2020-09-01 15:22:05 +08:00
    一百多兆感觉现在很正常啊,之前用开源项目 pentaho 打包一个 g 啊
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2537 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 11:56 PVG 19:56 LAX 04:56 JFK 07:56
    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