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

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

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

    Redis

    spring-data-redis,spring-data-reactive-redis,Lettuce,Redisson,Jedis 的依赖都有,项目中用的是自己实际封装的 jedis,用途也不复杂。Spring Actuator 好像会检查 Redistribution 连接,是用的 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
    一百多兆不算大..
    kpingdd
        8
    kpingdd  
       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
    我公司里现在所有项目差不多都这样,我不想鄙视谁,但是天天看着他们得过且过,这里复制一下那里粘贴一下,从来不会想去弄明白为什么,真的很气。
    oneisall8955
        21
    oneisall8955  
       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  
       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   ·   实用小工具   ·   2752 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 06:45 · PVG 14:45 · LAX 22:45 · JFK 01:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.