为什么有了 Git 还需要 ANT/Maven/Gradle?

2018-09-03 12:07:48 +08:00
 shayuvpn0001

以前写 C/C++/C#的,现在开始转 Java 了,东西有点多,最近看到这个 Build Tool 系列,感觉 Git 带 shell 脚本其实可以完成 ANT/Maven/Gradle 的工作,不知道我理解的对不对?

前者还有一个好处是不依赖网络, 在弄 Android 的时候,因为你懂得原因,经常会碰到某个包下不来的情况,这个算是 Build   Tool 的一个缺点么?

还有一点是,这个 build 工作大公司一般都是有专门的 Build & Release Engineer 负责,感觉 Java 把这部分工作转移到了开发程序员的身上了,不知道理解的对不对。

5170 次点击
所在节点    程序员
22 条回复
linjianru
2018-09-03 12:14:07 +08:00
你理解的不对。
javaWeber
2018-09-03 12:16:31 +08:00
Git 是控制版本的。。maven 是管理依赖的。。
starcraft
2018-09-03 12:18:23 +08:00
鉴于你是转 Java 所以应该是 git 白学了。
inhzus
2018-09-03 12:23:18 +08:00
非要类比也只能算作 submodules
linjianru
2018-09-03 12:23:49 +08:00
Git 解决的问题是分布式环境下代码的变更历史追踪问题。其他你列举的这几个,则是解决软件高度模块化后的依赖管理问题。

这两者内部唯一的相似点是都使用了 Graph 来描述关系,但 Git 内部主要是有向无环图;其他这几个则由于需要考虑循环依赖问题,从而可能使用了有环的图。除此之外,我暂时想不起来还有什么相似点。

另外,你提到可以用 Shell + Git 来实现一部分替代功能,是可行的,但这其实就是开发一个新的包管理系统而已,工作量并不小,需要考虑的问题有很多。可以写了玩玩当作学习。
geeti
2018-09-03 12:48:08 +08:00
这个问题就好像 有了笔记本为什么还需要自行车 一样
zn
2018-09-03 12:48:57 +08:00
@geeti 还要啥自行车?
ipwx
2018-09-03 12:50:06 +08:00
C#有 nuget,你没用过嘛?
vjnjc
2018-09-03 12:58:15 +08:00
对也不对。
假如你把 lib 放到 git 上去,那么用 git pull lib 就够了。
但一般不这么做,为了解决很多依赖问题还是要上 gradle,根据 gradle 配置从 mvn repo 下 lib~
Cbdy
2018-09-03 13:00:46 +08:00
ant、maven、gradle 对标的是 npm+webpack
lfzyx
2018-09-03 13:40:28 +08:00
Java 的 build 工作在国内一般是 devops 负责,什么时候敢让你们业务开发工程师负责了。
passerbytiny
2018-09-03 13:58:39 +08:00
你只能怪微软帮你做的太好了,抛开 visual studio,C++开发也要用 makefile 构建。

Android 包下不来是墙的原因,谷歌也有问题,android studio 只有 http 代理,但 gradle 只能使用 sockt 代理,坑的一笔。至于你想不依赖网络,说明你版本升级的慢,依赖包能几年都不升级版本的。

你最后一点是个伪命题,大公司不管开发啥,都不可能让编码人员负责最终构建和发布。你把大公司的 C 系列,跟小公司的 Java 开发对比,就跟前不久的国产操作系统跟 windows 对比一样。
fan123199
2018-09-03 14:38:29 +08:00
1. git 的话,只有下载,没有管理。1 ) maven/gradle 等可以和 ide 整合。 比如 A depends B, B depends C, 那么你在 A 模块下就可以有 C 的代码提示。2 ) maven/gradle 是中央库,可以通过关键字搜索。总之 maven 等是为了解决很多 lib,嵌套依赖等规模化之后的问题。如果你只有几个 lib,想怎么来都可以。
2. 不是。墙的问题也算工具的问题?
3. 不对。大公司的 java 也是有专门负责 release 的。

你的第一个问题里,用 git 管理依赖的一个例子就是 go 的依赖管理,go get 其实就是 git pull & build. 之后也要转 go module,因为有缺陷,管理不够精细。
chunwang1995
2018-09-03 14:46:58 +08:00
Maven/Gradle 是 “ Java 工程化”的工具组,正如盖房子一样,只有瓦工或者电工是无法盖成整栋的房子的,而需要“管理工具”粘合各项基本能力,Maven / Gradle 是“工程化”胶水,Git 更像是“开发流程化”胶水。
thisisgpy
2018-09-03 16:45:49 +08:00
为什么有了雷锋,还需要雷峰塔
Rizio
2018-09-03 17:07:09 +08:00
为什么有老虎了还要老虎钳
licoycn
2018-09-03 17:17:32 +08:00
为什么有了计算器还要有计算机
precisi0nux
2018-09-03 17:53:28 +08:00
为什么有了老婆饼,还需要老婆。
为什么有了 Java,还需要 JavaScript。
wowo243
2018-09-03 17:59:40 +08:00
楼歪了,我正一下。理论上是的,如果只用 git 的话,手动版本就是各种导包,自动化版本就是 shell 脚本执行各种下载、移动文件命导包。ant 没用过,mavne 的主要功能是依赖管理,最主要的目的就是替代各种引入 jar 包的繁琐过程。而 git 的主要作用是代码管理。
wowo243
2018-09-03 18:00:39 +08:00
菜鸡一枚,有大佬发现错误欢迎指正。

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

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

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

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

© 2021 V2EX