1
Cooky 2021-02-15 18:14:35 +08:00 15
“只要把东西搞的复杂到能把新来的人吓走,老板就不敢炒掉我”
|
2
charlie21 2021-02-15 18:16:19 +08:00 via iPhone 1
二逼答案:因为不需要,又没人付钱
歪理答案:复杂的方案是提高了从业人员的门槛,从侧面劝退 /降低了从业人员总人数,减少了业内竞争压力,同时有助于把脑力用在更重要的事上(相对地 前端开发的 package manager 一只手都数不过来) 普通答案:业界选择 遵守就是了 |
3
liprais 2021-02-15 18:16:35 +08:00 8
你用 pip 解决过版本冲突么......
|
4
Cbdy 2021-02-15 18:16:37 +08:00 via Android
UP 说得很有道理,Java 可以弄一个简单点的
至于现状为啥是现在这个样子,可能是 Java 程序员普遍喜欢过度设计有关系吧 |
5
12101111 2021-02-15 18:17:22 +08:00 7
你可以看看 c/c++的一堆怪物,GNU make, BSD make, autotools, CMake, meson, ninja, 各个都有自己的 DSL
|
6
lasfresas 2021-02-15 18:17:41 +08:00
java is a horrible language.
|
7
love 2021-02-15 18:19:09 +08:00 11
Java 的特点就是很擅长把简单的事搞复杂,从软件架构风格就可以看出来
很多年前从 Java 转到 PHP 时第一感觉是写代码真直白每一行全是干货~ |
8
yikuo 2021-02-15 18:26:53 +08:00 via Android 4
我反而觉得 gradle 比 npm 简单多了
|
9
TypeError 2021-02-15 18:29:01 +08:00 1
go mod 也比 gradle 简单
Java 历史包袱太重了 |
10
Sharuru 2021-02-15 18:29:27 +08:00 3
npm (originally short for Node Package Manager)[4] is a package manager for the JavaScript programming language.
Gradle is a build automation tool for multi-language software development. : ) |
11
ZeawinL 2021-02-15 18:33:08 +08:00 via Android
存在即合理,node 不也有 gulp 之类的…
配置易读,代码易写 |
12
WispZhan 2021-02-15 18:35:23 +08:00 via Android 23
拿一个 纯粹的包管理 和 构建工具 比真的客观?
要是真的搞懂了这 2 类工具的差别,或许会不会用已经不重要了,容不容易用已经无所谓了 |
14
fz420 2021-02-15 18:42:17 +08:00
|
15
yeqizhang 2021-02-15 18:55:26 +08:00 via Android
有些动不动就是 java 故意把东西搞复杂的阴谋论。
我寻思着这玩意明明是国外搞起来的东西呀 |
16
littlewing 2021-02-15 18:55:39 +08:00 via iPhone
maven 不是包管理器
|
17
hengyunabc 2021-02-15 18:58:39 +08:00 46
现在黑 JAVA 成了潮流? npm 和 go 用得不多,但也可以说下自己的理解。
1. maven2 是 2005 年发布的,但它现在来看还是非常领先的。 2. maven 设计了打包的各个生命周期,概念,并且非常容易写插件,生成源码,添加资源等等。 3. 用 maven/gralde 打包其它语言是相当容易的,反过来估计能做到的不多。 npm 根本和 maven 不是一个层面的对手。从两点设计就知道了: 1. 每个应用自己一个 node_modules 打包目录,无数的人搜怎么清理。(现在已经改为链接到~/下面了) 2. 小版本默认升级,`~`和`^` npm 一个笑话就是:一个工程不说十个月,就是一星期后,就可能打包不成功了。 一个 java maven 工程,十几年过去之后,仍然可以正常打包。一个 maven plugin,十几年之后,仍然能工作。 以前还有笑话是:Java 打包出来的结果文件大。 实际上过了几年,发现 nodejs 打包结果动不动就几百 M,go 打包结果也是越来越大了。 go 的包设计非常的奇怪。 1. import 一个 git 仓库,如果这个仓库被攻击了呢?怎么保证安全性?过了好多年,才加了一个 hash 的补丁 2. go import 一个 git 仓库,是因为本身它编译时要求全是源码,不能生成中间结果 3. 作为一个用户,我要盯着一个依赖的仓库的 hash 值?依赖管理本身不应该看的是版本号么? |
18
across 2021-02-15 19:09:30 +08:00 via iPhone 1
npm 才是最麻烦的吧,难道是因为我接触 web 最晚?
npm 这种开源工具,工程上就非常发散,webpack 写的头大,自动安装更多是受益于开源免费试用。 |
19
lewis89 2021-02-15 19:14:55 +08:00 2
真的不复杂,上家公司被搞过前后端分离,唯一的疑惑就是为什么 npm 过几天就打包编译不成功了... 难道代码会变质?我啥也没动啊.. 用 maven 后没遇到过..
|
20
tinyuu 2021-02-15 19:15:37 +08:00 1
maven 复制粘贴 xml 又标准又简单。
|
21
lionseun 2021-02-15 19:17:31 +08:00 via Android 3
版本需要精确控制,反观 npm pip 的那种升级性版本支持,对于找 bug 就是一种隱性
|
22
echo1937 2021-02-15 19:27:26 +08:00 1
前几楼是无知还是傲慢,动不动就是阴谋论。
|
23
vjnjc 2021-02-15 19:29:56 +08:00
感觉打包的痛点是版本冲突,其他的没看出啥区别
|
24
murmur 2021-02-15 19:31:45 +08:00 4
只有没干过项目的才会盲喷这东西多复杂,再复杂的东西只要能抄作业什么都可以搞定,spring 年代就有 springside 给你抄作业了,还真的手写配置啊
最怕的是什么,怕的是抄作业都能抄不过 |
25
hantsy 2021-02-15 19:35:10 +08:00 2
npm 包管理兼容性最差。
软件包依赖问题,除了 Linux 系统的 DEB,好像软件开发领领域 maven 算是鼻祖类吧,除了包依赖管理,Maven 一套生命周期才是神器,黑 Java 真是笑话。 |
26
FreeEx 2021-02-15 19:35:40 +08:00 2
关联这个帖子看就会很喜感 -.- https://v2ex.com/t/752463#reply9
|
28
impl 2021-02-15 19:41:01 +08:00 via Android
Java 以前用的是 ant,一些项目像 Tomcat 还在用 ant
|
29
lixingjun 2021-02-15 19:41:30 +08:00
历史包袱,npm 确实方便,但也有很多缺点
|
30
redtea 2021-02-15 19:59:44 +08:00
一直用 Maven,挺不错的。最近用了 Python 写个项目,它的包管理方式才叫可怕,不能任性升级,否则就无法运行,安装包的顺序也需要注意,否则影响其他包就安装不了,为了安装一个包,我甚至不得不安装 C++编译器。
|
31
troywinter 2021-02-15 20:16:20 +08:00 2
因为你现在站在历史的肩膀上,你用 pip 处理个依赖冲突试试? python 这么多年了都没有个可用的依赖管理,java 面向的是企业级市场,不能说,这个依赖冲突了就改代码,客户停机一次上亿的损失,当你处理了更多 2b 的需求就会知道为啥要设计这么复杂。
|
32
xarthur 2021-02-15 20:17:21 +08:00 via iPhone
gradle 一点也不复杂啊……
|
33
xarthur 2021-02-15 20:19:25 +08:00 via iPhone 1
gradle 无脑往 dependences 里写依赖就行了
|
34
pursuer 2021-02-15 20:25:38 +08:00 via Android
maven gradle 主要是构建工具,而不仅仅是下载依赖,构建不是一个简单的工作,可以看下 make autoconf ninja cmake 构建工具的发展历史。不过我对 gradle 可没有太多好感,一个用于 java 开发的电脑不注意的话电脑上会存有一大堆不同版本的 gradle 。实际 pip/setuptools 也有 python 项目构建功能,可以看看 setup.py 是怎么写的
|
35
lower 2021-02-15 20:26:05 +08:00
要什么包管理?
手动复制粘贴 jar 包进 lib,一把梭就是干 打包?把一堆 class 用 rar 打包就行啦,多方便 |
36
hafuhafu 2021-02-15 20:33:57 +08:00 6
maven 管理依赖会复杂吗...我陷入了沉思。
npm I XXX 和复制粘贴一个<dependency>我觉得都没啥心智负担。 我发现有些人对 java 的恶意真的是无限大,费尽心思就要把 java 往“古板”、“复杂”、"不会变通"等刻板印象和标签上引。 |
37
limuyan44 2021-02-15 20:36:47 +08:00 via Android
难道你是前端出身吗,npm 也配拿出来比了么。
|
38
blessingsi 2021-02-15 20:37:09 +08:00 3
java 确实有一些问题,但是拿 npm,pip 黑 maven 真的合适?不说 maven 除了依赖管理之外的功能,就算是单纯比较依赖管理,这两个都被 maven 秒杀吧?要不然还要那一堆 python 虚拟环境工具干嘛用
|
39
micean 2021-02-15 20:42:13 +08:00
依赖管理不就复制粘贴的活,哪里复杂???
|
40
wangxiaoaer 2021-02-15 20:45:21 +08:00 via iPhone 1
前几楼简直无知的要死,我都看的怀疑人生了。
|
41
zjqzxc 2021-02-15 20:52:03 +08:00
@liprais 解决过,版本冲突也算是常见问题了;一般 requirements.txt 默认都带版本号,配合 virtualenv 食用。
|
42
ScepterZ 2021-02-15 20:57:41 +08:00
@hengyunabc go 现在不也是看版本号么
|
43
afewok 2021-02-15 21:11:48 +08:00
年轻人,不讲原理,就看谁入门少敲几个字符,就评价,这好嘛?这不好。
|
44
superrichman 2021-02-15 21:17:23 +08:00 via iPhone
maven 对新手很不友好,配置环境这一步就能吓退一堆萌新,各种配置的复杂程度根本不适合入门的人去用。
查看 maven 默认配置,卧槽一堆英文,卧槽 xml 文件怎么长得这么难看,马老师,这写的是甚么? 萌新好不容易配置对了,结果一个包半天下不下来,改来改去也不知道哪里出问题。依赖里的某一个文件卡半天下不来,得一层一层找到出问题的文件删了再下,有时候还要重复好几遍,太难了。 依赖 update 半天还是原来的,有时候 clean 好几遍才能 update 成功,有时候还要 force update 。艹,这么多项目都要改,太难了。 还有些奇葩的包不在 mvnrepository,又要做特殊处理,萌新表示太难了。 |
45
xarthur 2021-02-15 21:38:06 +08:00
@pursuer gradle 版本多其实也好解决,你设置一下,不要用 gradle wrapper (也就是 gradlew )直接用本地安装的 gradle 跑就行了,gradle wrapper 不是必须的。
|
46
abcbuzhiming 2021-02-15 21:38:54 +08:00 4
其它的我不评论,npm 这个玩意有啥资格来评价 maven
|
47
goalidea 2021-02-15 21:45:42 +08:00 1
java:哇擦,无情,不讲武德! node 年轻人耗子尾汁!
|
48
Lemeng 2021-02-15 21:50:32 +08:00
不算复杂
|
49
saberlong 2021-02-15 21:53:17 +08:00 via Android
@hengyunabc 关于你说的仓库被攻击引入 hash 的问题。java 也存在,任何从仓库下载的都存在篡改问题。而且 go 也能做到从企业内部的仓库下载。
|
50
xcstream 2021-02-15 22:00:29 +08:00
不许百度 linux 服务器上
空手写个 web 服务 node 只要 5 分钟 |
51
chihiro2014 2021-02-15 22:04:04 +08:00
我一直觉得前端的代码,过了几周就打包不了,maven 还没遇上这种问题
|
52
BBCCBB 2021-02-15 22:06:18 +08:00
maven 可以用命令行的
|
53
EminemW 2021-02-15 22:07:11 +08:00 via iPhone
不要胡说霸道,依赖文件写好并不需要改配置文件
|
54
EminemW 2021-02-15 22:09:01 +08:00 via iPhone
还有 maven gradle 应该叫项目构建工具,并不是包管理工具
|
55
ikas 2021-02-15 22:16:50 +08:00 1
等到他们都实现了 maven/gradle 的功能,回头再来看看,不就又是第二个第三个"maven"么
|
56
hantsy 2021-02-15 22:17:38 +08:00
@xarthur 如果说到 Java 内部嘛,Gradle 版本兼容性简直是灾难。各大版本之间配置升级旧的配置格式会被废弃删除,大版本几乎不兼容,想用 Gradle 6.7 去运行 5 时候创建的真实项目,基本上不修改配置不可能运行。Wrapper 就是为了锁定版本,解决了这个问题,但同时也要额外下载相应的 Dist,我的用户目录光 wrapper 下载的 Gradle Dist 都是超过 20G 了。项目如果使用 Gradle,你几乎要时刻更新到最新的 Gradle 格式,以保证你的代码在别人拿到后,可以使用最近半年的 Gradle 成功的 Build 。
但是 Maven 配置的兼容性堪称优秀。Maven 3 运行 10 几年前 Maven 2 程序一样没问题。虽然将要发布的 Maven 4 ( 3.7 版本计划被废弃了)也可能会加入 Wrapper (但个人觉得完全没必要)。 ANT 在 Maven 大规模使用之前一直是 Java 项目实现自动构建的首选。 虽然 Ant 在新项目中几乎没有多少人会采用,但大量的遗留项目一直还在使用 ANT 。ANT 并不是没进化,ANT 下的子项目 IVY 也是用于依赖管理,与 ANT 结合,一样可以利用 Maven 库,自动解决依赖问题。 SBT 和 Gradle 相似,后台一直跑进程,提供一个交互的编译的环境,只是曲高和寡,几乎只有在 Scala 项目用到(个人我也不喜欢)。 (扯远一点,Ivy 虽然可以读取分析 Maven 坐标,但它自己有一套关于依赖的设计理念,早期 Gradle 也是使用 IVY 解析依赖,后来才切换到使用 Maven 兼容方式的,目前似乎 SBT 还在用默认用 IVY 来解析依赖。) |
57
janus77 2021-02-15 22:22:00 +08:00
java 哪来的包管理工具,都是 build 一整套
单纯说 java 的依赖包系统才是最简单的,直接一个 jar 包丢过去,不用编译生成,不用特别写什么,直接就能用。 |
58
aureole999 2021-02-15 22:23:30 +08:00
@hengyunabc 正好看的前几天的新闻,这人搞到公司内部用的包名,然后在公共仓库上传了一个同名的,就在 Apple 和微软的内部服务器上成功执行了代码。至少这点上 Go 还没那么容易,不是一个同名的包就行。而且这人说最容易搞到的内部包名就是从一些网站的 js 文件里找到,所以他攻击成功的有 75%是 npm 。
https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610 |
59
royzxq 2021-02-15 22:39:40 +08:00 4
不是,说前端项目过几周就打包不了的是不是项目里都不用 yarn.lock / package-lock.json ?
|
60
SystemLight OP @liprais pipenv 独立配置环境不行么
|
61
ming7435 2021-02-15 22:56:11 +08:00
npm 也配合 maven 比?你是不是还没入行?
|
62
SystemLight OP |
63
SystemLight OP @ZeawinL 但是 gulp 是打包构建工具,难道说 gradle=npm+gulp 么,如果是这样还可以理解,可是 gulp 是解决 JS 模块化的,但是 JAVA 不是本身就支持模块化么,为什么还需要这样呢,而不是一个依赖包管理的工作呢
|
64
SystemLight OP @WispZhan 没有搞懂 JAVA 为什目需要构建工具,而不是一个单纯的包管理,前端需要 webpack 这样的打包构建工具可以理解,解决模块化问题,但是 JAVA 为什么还需要构建呢,解决了什么问题,我记得很久之前写 JSP 的时候没有 gradle 也是用的相当好的啊
|
65
xuanbg 2021-02-15 23:04:45 +08:00
npm 那个叫简单???我觉得 maven 倒是挺简单的
|
66
SystemLight OP @Cbdy 一个天生支持模块化的语言为什么需要构建,这个是我没有相同的,如果说要结合 kotlin 我还能理解,但是 JAVA 居然不把构建和依赖包管理分离开,我是想不通的,而且依赖包需要手动粘配置文件,这个是什么年代了,哈哈!!!
|
67
xarthur 2021-02-15 23:10:32 +08:00 via iPhone
@SystemLight jvm 是个平台,首先就有很多语言,举例来说 Scala 和 Java 或者 Kotlin 和 Java 的混编。其次 Java 语言特性的孱弱,导致了很多工具都依赖 Java 的注解来在编译期实现功能,比如 Lombok,接着还有要不要混淆,然后你可以生成字节码也可以直接生成二进制目标平台代码。最后你选择是要打包还是不打包直接一堆 class 文件呢?打包你是要 jar 还是 war 呢!
|
68
xarthur 2021-02-15 23:10:57 +08:00 via iPhone
*!->?
|
69
SystemLight OP @across webpack 复杂度从宏观上确实和 gradle 有的一拼,但是 npm 工程上非常发散能否详细说说,对比 gradle 是如何解决这个弊端的么,我目前是没感受到,请详细说下,npm 包管理器不只是依赖包安装的工具么。
|
70
xarthur 2021-02-15 23:13:42 +08:00 via iPhone
@SystemLight 这个不是什么黑点,首先 java 光常用的公共仓库就有两个,私有仓库就更多了。其次 Java 的库不像 javascript 的库,一般一个库提供的功能非常的全,也不用三天两头加仓库。
|
71
SystemLight OP @lewis89 老哥你这个回复我感觉我学了假前端,哈哈,npm 只做包管理,顶多是软件源安装不了,打包编译应该是 webpack 或者 gulp 这种工具做的,npm 表示这个锅不背
|
72
SystemLight OP @murmur 并不是喷这个东西有多复杂,只是想知道复杂的原因是什么,对比其它语言的包管理好处是什么
|
73
SystemLight OP @hantsy npm 包管理兼容性最差 ,能否举个具体的简单例子呢
|
74
xarthur 2021-02-15 23:20:08 +08:00 via iPhone
@hantsy Maven 相比之下 gradle 来说不够灵活,而且打包速度似乎也没有 gradle 快( gradle 官方有测试)。gradle 还支持渐进式编译可以缓存结果。顺便 gradle 现在目标是想当个通用的构建工具,不光是用在 jvm 上。
兼容性的问题其实从 gradle4 起,特别是 gradle5 、6 已经好很多了。这点确实做的不如 maven SBT 是真的不好用,又慢稳定性也差。 |
75
tt0411 2021-02-15 23:20:49 +08:00 8
在 Java 领域的很多"问题", 只有在工作一定年限并且有一定思考后才能意识到是自己的问题
|
76
xarthur 2021-02-15 23:21:20 +08:00 via iPhone
@SystemLight 有哪个构建工具是非常简单的吗? webpack 也不简单啊……make 之流就更复杂了。
|
77
SystemLight OP @FreeEx 缺失 node_modules 占空间是硬伤,但是 gradle 难道是编译时候才去下载的依赖包,然后编译完又清除的么
|
78
SystemLight OP @lixingjun 我目前感觉的就是 node_modules 太占空间了,删除是硬伤,哈哈
|
79
xarthur 2021-02-15 23:24:06 +08:00 via iPhone
@SystemLight 如果你只是想构建一个 default 的项目结构的项目,我之前也说了,直接往自动生成的 build.gradle 里 dependencies 里加依赖就行了。
|
80
SystemLight OP @redtea 包能不能任性升级难道不是这个开源依赖原本是否兼容造成的么,和包管理器有啥关系,为什么不用 requirements.txt 把包版本锁定一个稳定版呢,-_-
|
81
icyalala 2021-02-15 23:26:22 +08:00
npm 和 pip ?你是认真的吗?
|
82
xarthur 2021-02-15 23:28:16 +08:00 via iPhone
@SystemLight gradle 会重用不同项目里的相同依赖。
|
83
xarthur 2021-02-15 23:29:58 +08:00 via iPhone
@hantsy 我个人喜欢 gradle 还有一点就是它用 groovy/kotlin 做 dsl,这个比起看一堆 xml 好受多了。而且可以很便捷的写一些脚本方便自己使用,打包成可以分享的插件也方便。
|
84
SystemLight OP @hafuhafu 可能心情上不太一样吧,毕竟 JSON 文件通俗易懂,groovy 语言看着懵逼吧,但是 java 语法糖总觉得太少了对比.net5,可能要追求稳定吧。
|
85
xuweifeng1987 2021-02-15 23:33:43 +08:00
看了下评论,笑死啦哈哈
其实 maven 和 npm 原理类似,只不过 maven 肩负的更多,maven 管理 jar 包只是很小一部分功能,看看 maven 第三方构建插件生态,你会发现更大的世界 ;) |
86
SystemLight OP @superrichman 哈哈,太真实了
|
87
cleveryun 2021-02-16 00:15:26 +08:00 via Android
jar 的服务器部署真香,比 npm 的方便多了。
|
88
geekaven 2021-02-16 00:17:59 +08:00 via Android
你这就好比拿文本编辑器比 idea,问为啥 idea 搞那么复杂。
|
89
huskar 2021-02-16 01:23:39 +08:00 via Android
1.python 语言对应的工具应该是 poetry 或者 pipenv,pip 和这几个不是做同一件事的。
2.java 的 maven 比其他语言的构建工具出现早太多了,可以说其他几个工具都是站在 maven 肩膀上的,所以它们可以取长补短,因此对新人来说觉得这些工具好用很正常。maven 因为出现的早,必然有其历史局限性,比如 maven 使用繁琐的 xml,而后继者普遍采用更简洁的 json,toml 或者 dsl 。 3.这几个语言和构建工具都在用,熟悉了以后觉得其实都差不多,没有什么根本性的差异。楼上有些人硬吹 maven 最好我不敢苟同,我觉得对新手而言,明显是后来出现的构建工具更简单好上手。 |
90
sampeng 2021-02-16 03:09:32 +08:00 via iPhone 7
无知当无谓,用得少就不要评论任何流行工具。
你拿 npm 给我自动生成一套项目模版试试? 你就什么都不动,无脑 npm install 试试?我现在是运维,天天被前端说怎么打包不过去 /线上功能怎么和他测的不一样,就过了一个晚上升级了小版本找谁说理去? 不要抬杠说可以去改配置。拿 npm 所有吐槽点变成正常点后,和 maven/gradle 有啥区别? webpack 配置通俗易懂?来来来,你花一个小时看能不能教一个刚毕业的搞明白 webpack 。maven/gradle 完全没问题,都是结构化的。新人其实很好看明白例子。 前面有说 rust 的,go 的,真的很牛逼么? go mod 发展了几年?最后是怎么诞生的,麻烦你们自己查查资料。真的好用?做自动化构建的时候真的和 java 比一个天上一个地下。rust 现在最蛋疼的就是依赖构建和自动化打包,一下下一堆包不说,项目稍微大点就是半个小时起。别扯本地。都 2021 年了,谁发版从开发电脑上打包?稍微有点团队配合,模块一没分好打包时间就上天了。下载就更不用说了,没科学上网就别想顺利开发。 这还是正常情况,最蛋疼的就是 tokio 版本,经常一不小心整个项目就编译不过去,因为有些老项目不更新 tokio,有些又用的一个版本。然后你自己得有用的最新的,一编译,哦豁,runtime 不匹配我就要去解决版本冲突…maven 解决版本冲突不要太简单 go 写的少,没怎么碰到过坑。 maven 和 gralde 的问题绝壁不是工具本身。xml 配置屎山是人配出来的。 当然,我喜欢 rust,我也讨厌 java,太啰嗦。但不妨碍优秀的东西本身的优秀。很多在 rust 里面得东西我还很希望有类似 java 的 xx 工具,不是使用惯性,我 java 也写的很少。就看点开源项目而已。 |
91
sampeng 2021-02-16 03:22:20 +08:00 via iPhone
@SystemLight 另外我给你解释一下为什么 java 需要构建工具,因为 java 在稍微有点规模得公司和写 js 的人的比例都最少是 10:1,你不会以为 java 后端都跟 js 一样都塞一个项目里一个 src 目录完事吧?所以你拿一个只需要几个人开发就完事的和团队作战才行的比,合适么?
|
92
HibernatePlus 2021-02-16 05:16:04 +08:00
一不用上大学就能学会的前端能和需要了解计算机原理的 java 相提并论?搞笑呢吧在这
|
93
fox0001 2021-02-16 07:51:44 +08:00 via Android 1
我只能说,楼主还是年少气盛。当年我刚毕业,Java 已经出 1.6 了,公司项目还在跑 1.4,甚至更老。因为升级的问题,老板还特意开了个会,提出个观点:能赚钱的代码就是好代码。曾经我觉得作呕的观点,现在算是认同了。
1 )企业需要盈利。盲目跟风升级会带来很多额外的工作(写新代码、测试、培训人员、维护历史版本等),直接浪费很多钱。 2 )项目需要稳定。新功能会带来新 bug 、新漏洞,测试人员不可能 100%覆盖。特别对于结算功能,算错的钱,谁去承担? 3 )更需要关注的是业务功能,满足客户需求。 4 )新人都喜欢炫耀技术(特别是喜欢技术对比,我当年也是这种心态),老人总想着赚钱养家。特别老板要考虑整个公司的发展。 后面公司架构师还是技术升级了,毕竟 Java 1.6 带来实在的好处。但是旧项目就很蛋疼,例如看着好用的新模块,不能直接搬过去。 |
94
ebony0319 2021-02-16 09:19:59 +08:00 via Android
楼主说的几种包管理我都用过,正常使用 java 稍微复杂一点,但是项目一大,引入的包一多,冲突就多了。很多时候需要选择 a 还是 b,很多时候也要同时保留 a,b 并且保证他们不冲突,有时候需要插件来辅助…java 在这方面真的还是非常先进。
|
95
hantsy 2021-02-16 10:40:34 +08:00
@SystemLight 来例子,https://github.com/hantsy/angularjs-springmvc-sample-boot 这个例子大概只有 4,5 年时间,你可以前后编译对比一下 NPM,Maven 的包管理。
另外,https://github.com/hantsy/signup-app 这个差不多快十年了,Maven 一样可以编译。 去年给一个前端项目 Angular 加一个 CI,全部依赖都是 Broken, 开发人员半年一直自己机器上开发,没更新依赖,然后笨号用^的话,更新后完全不兼容,Node 项目相互依赖的版本更敏感。Angular 现在自己有自动升级工具(可以更新相应的依赖),不然的话,自己手动升级,你还得仔细读它的依赖库( rxjs, karma 等)版本多少。 |
96
TheWidowMaker 2021-02-16 10:55:52 +08:00 via Android
好家伙,真的还有人拿 npm 来给 java 的包管理说事的,这是我万万没想到的
|
97
hantsy 2021-02-16 10:58:05 +08:00
@xarthur 觉得 Groovy DSL,Kotlin DSL 来写配置就是灵活???
这些 Maven 早就支持了。https://github.com/takari/polyglot-maven Atom polyglot-atom Groovy polyglot-groovy Clojure polyglot-clojure Kotlin polyglot-kotlin Ruby polyglot-ruby Scala polyglot-scala YAML polyglot-yaml Java polyglot-java XML polyglot-xml 虽然 Gradle 发展这么多年。但是很插件还只是有 Maven 版本,没有 Gradle 支持。生态方面 Gradle 还是不行。 |
98
hantsy 2021-02-16 11:02:19 +08:00
习惯方面不用说了,每个人看法不一样。
就之前说那个兼容性我都是受不了 Gradle,但日常我也用,有些项目用什么技术不属于我控制的范围,不然我个人也不产生 20G Gradle Dist 垃圾文件。(我整个下载的 Maven 依赖库也才 20G 左右) 我个人新项目肯定不用 Gradle 的。 |
99
hantsy 2021-02-16 11:06:45 +08:00
NPM 比较蠢的是有全局缓存,每个项目中在 node_modules 又再 Copy 一次,硬盘杀手啊。
|
100
justin2018 2021-02-16 11:22:23 +08:00
npm 就是一个坑货
使用 npx npkill 释放硬盘空间~ 一个月清理一次 可以释放最少 10G 空间 年前把家里的工作机清理了 释放了 100G 的空间 o(╥﹏╥)o ![]( ) |