为什么 Java 的包管理器都这么复杂?

2021-02-15 18:04:09 +08:00
 SystemLight
  1. 反观 node 的 npm,python 的 pip,.net 的 nuget 哪一个不是一个命令就安装好的依赖包
  2. 为何 java 的 gradle 或者 maven 都没有这样的特性,还需要自己去配置文件而不是命令安装,而且 gradle 用的 groovy 闭包写法外行看了完全懵逼,而 npm 的 package.json 用 json 语法易读相当高
  3. Java 包管理方案难道就不能简单一点,为何要搞得如此复杂,难道不应该是花费更多精力处理业务逻辑么,包管理搞得如此复杂还要去配置这个东西
19100 次点击
所在节点    Java
158 条回复
Cooky
2021-02-15 18:14:35 +08:00
“只要把东西搞的复杂到能把新来的人吓走,老板就不敢炒掉我”
charlie21
2021-02-15 18:16:19 +08:00
二逼答案:因为不需要,又没人付钱
歪理答案:复杂的方案是提高了从业人员的门槛,从侧面劝退 /降低了从业人员总人数,减少了业内竞争压力,同时有助于把脑力用在更重要的事上(相对地 前端开发的 package manager 一只手都数不过来)
普通答案:业界选择 遵守就是了
liprais
2021-02-15 18:16:35 +08:00
你用 pip 解决过版本冲突么......
Cbdy
2021-02-15 18:16:37 +08:00
UP 说得很有道理,Java 可以弄一个简单点的

至于现状为啥是现在这个样子,可能是 Java 程序员普遍喜欢过度设计有关系吧
12101111
2021-02-15 18:17:22 +08:00
你可以看看 c/c++的一堆怪物,GNU make, BSD make, autotools, CMake, meson, ninja, 各个都有自己的 DSL
lasfresas
2021-02-15 18:17:41 +08:00
java is a horrible language.
love
2021-02-15 18:19:09 +08:00
Java 的特点就是很擅长把简单的事搞复杂,从软件架构风格就可以看出来
很多年前从 Java 转到 PHP 时第一感觉是写代码真直白每一行全是干货~
yikuo
2021-02-15 18:26:53 +08:00
我反而觉得 gradle 比 npm 简单多了
TypeError
2021-02-15 18:29:01 +08:00
go mod 也比 gradle 简单

Java 历史包袱太重了
Sharuru
2021-02-15 18:29:27 +08:00
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.

: )
ZeawinL
2021-02-15 18:33:08 +08:00
存在即合理,node 不也有 gulp 之类的…
配置易读,代码易写
WispZhan
2021-02-15 18:35:23 +08:00
拿一个 纯粹的包管理 和 构建工具 比真的客观?

要是真的搞懂了这 2 类工具的差别,或许会不会用已经不重要了,容不容易用已经无所谓了
Cbdy
2021-02-15 18:39:15 +08:00
@Cbdy 另外,Gradle 其实应该和 webpack 比
fz420
2021-02-15 18:42:17 +08:00
比起 java, 看到 go 的 mod, rust 的 cargo 相对来说发展的相当易用啊。
转 go/rust 吧
yeqizhang
2021-02-15 18:55:26 +08:00
有些动不动就是 java 故意把东西搞复杂的阴谋论。

我寻思着这玩意明明是国外搞起来的东西呀
littlewing
2021-02-15 18:55:39 +08:00
maven 不是包管理器
hengyunabc
2021-02-15 18:58:39 +08:00
现在黑 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 值?依赖管理本身不应该看的是版本号么?
across
2021-02-15 19:09:30 +08:00
npm 才是最麻烦的吧,难道是因为我接触 web 最晚?
npm 这种开源工具,工程上就非常发散,webpack 写的头大,自动安装更多是受益于开源免费试用。
lewis89
2021-02-15 19:14:55 +08:00
真的不复杂,上家公司被搞过前后端分离,唯一的疑惑就是为什么 npm 过几天就打包编译不成功了... 难道代码会变质?我啥也没动啊.. 用 maven 后没遇到过..
tinyuu
2021-02-15 19:15:37 +08:00
maven 复制粘贴 xml 又标准又简单。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/753415

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX