为什么 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 包管理方案难道就不能简单一点,为何要搞得如此复杂,难道不应该是花费更多精力处理业务逻辑么,包管理搞得如此复杂还要去配置这个东西
20251 次点击
所在节点    Java
158 条回复
matrix67
2021-02-16 11:23:05 +08:00
翻页
young1lin
2021-02-16 11:42:37 +08:00
Maven 其实挺简单的啊,你花 30 分钟学个教程,就能搞懂了,怎么叫复杂了呢?常用的就那几个东西啊,Gradle 表面上看起来非常精简,但是要自定义一些内容的时候就比较麻烦了,还有处理版本问题,exclude 还是挺好用的。而且 XML 这种格式,它不理解起来容易吗?
EIJAM
2021-02-16 12:02:19 +08:00
@superrichman 怕读英文的人何苦做开发呢?
shellic
2021-02-16 12:13:21 +08:00
别的不知道,反正我觉得最难用的当属 npm 没有之一,pip 、composer 、maven 比起 npm 简直就是清流
Magentaize
2021-02-16 12:23:40 +08:00
虽然 npm 和 pip 不能和 gradle 相比,但是 dotnet 这边的 nuget 和 msbuild 很好用啊
DefoliationM
2021-02-16 12:25:38 +08:00
java 不就这样 又臭又长
superrichman
2021-02-16 12:28:38 +08:00
@EIJAM 我见过的很多程序员是没有很好的英文功底的,也不会阅读大段的英文文档,但是人家还是在做开发。世界就是这样,各种各样的人都有。
xarthur
2021-02-16 12:53:40 +08:00
@hantsy 你用插件和第一方支持比就没什么意思了……
xarthur
2021-02-16 12:56:02 +08:00
@hantsy 而且 build.gradle 严格意义上也不是一个配置文件,是个完整的脚本。只是 DSL 的特性让它看上去像是个配置文件……
mritd
2021-02-16 13:01:12 +08:00
你说别的我信,但是 npm 就别来扯淡了好么,最烂的就是这玩意
johnsona
2021-02-16 13:01:55 +08:00
各位大神不知萌新苦,有没有什么好的 java 教程推荐,说看英文文档的速速退去
Jirajine
2021-02-16 13:13:03 +08:00
@sampeng gradle 难用的原因主要是因为它是 language agnostic 的,而 npm/pip/cargo 等则是为某个语言专门设计的(脚本语言不需要编译,因而安装依赖等同于链接,可以看作是“构建”)。
cargo 算是比较现代的构建 /依赖管理工具了。编译慢是 rust 的原因,ci/cd 最好配上 sccache 。有 samver 和 mangling,找不到兼容版本也可以共存,多数情况下都是无痛的。
另外 gradle 工具本身,兼容性糟糕(一大堆不同版本),groovy dsl 难用,作用不大的 c/s 架构(会导致多个 daemon 进程、文件锁之类的坑)。当然这些也在改善,等什么时候默认用 kts 、不用 gradlew,那体验还会好一点。
walpurgis
2021-02-16 13:29:00 +08:00
楼主说的其实是 maven 和 gradle 的使用体验差,并不是管理依赖的稳定性,这点我是同意的
在入门的时候感受明显,别家照着教程敲一行命令就搞定了,java 给一段配置不知道粘贴在哪,每次起新项目就去翻老项目的 pom 当模板
taoboli
2021-02-16 13:32:44 +08:00
还有吹 npm 的?凡是在 Windows 下装过 node-gyp 就知道什么是狗屎般的体验。
就前几天项目有个 node-gyp 依赖,npm 要对其进行编译安装,python3 和 vs2019 都不识别,硬是要在 2021 年装一个 python 2 和 vs2015 build tools 才能顺利编译、安装。
Perry
2021-02-16 13:43:22 +08:00
什么都不说上来就喷 Java 的,要没就是没学过计算机科学,要么就是双商有问题。
coolesting
2021-02-16 14:05:24 +08:00
npm 上手快,易用, 但目前包管理方面绝对是坑货。

gradle,上手慢, 复杂。 但稳重,有踏实感。
cus
2021-02-16 14:58:24 +08:00
Python 一个项目一个 venv…
hantsy
2021-02-16 14:58:44 +08:00
@taoboli Python3,VS2019 在 Nodejs 15 以后是可以用的。gyp 真正一朵奇葩。依赖 gyp 太多,典型的 Node sass 很多架框都用了,基本上无法避开。
hantsy
2021-02-16 15:12:07 +08:00
@xarthur 说 build.gradle 是脚本太牵强了,只是它可以嵌入自定义的脚本而已,但是 Gradle 的每版本的支持格式是非常严格的定义,生命周期也与 Maven 类似。不要拿 DSL 说事,Gradle 中的 Groovy 和 Kotlin 的 DSL 有严格语法的,与 XML,YAML 类似,对大多数人来讲,只是换一种写法而已。

Gradle 最初出来的时候,有人给出一个定位,Gradle 就是 Maven+Ant 脚本, 有固定一套生命周期,支持自定的脚本,这个基本上说明了 Gradle 定位。这些年基本上没什么变化,没有脱离。

至于上面有提到 Gradle 的语言中立,不仅仅 Jvm 语言,基本可以说上自己一厢情愿的意淫吧,这基本和 MSBuild 支持 C/C#之外的语言一样。
blless
2021-02-16 15:13:14 +08:00
我大 go module 终于扬眉吐气了,我个人宣布 go module 天下第一!
前面说 go 打包镜像慢的,我们公司自己各种 goproxy,大项目是需要固化依赖到 vendor 的,根本不需要下载资源。

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

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

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

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

© 2021 V2EX