以前写 C/C++/C#的,现在开始转 Java 了,东西有点多,最近看到这个 Build Tool 系列,感觉 Git 带 shell 脚本其实可以完成 ANT/Maven/Gradle 的工作,不知道我理解的对不对?
前者还有一个好处是不依赖网络, 在弄 Android 的时候,因为你懂得原因,经常会碰到某个包下不来的情况,这个算是 Build Tool 的一个缺点么?
还有一点是,这个 build 工作大公司一般都是有专门的 Build & Release Engineer 负责,感觉 Java 把这部分工作转移到了开发程序员的身上了,不知道理解的对不对。
1
linjianru 2018-09-03 12:14:07 +08:00 6
你理解的不对。
|
2
javaWeber 2018-09-03 12:16:31 +08:00
Git 是控制版本的。。maven 是管理依赖的。。
|
3
starcraft 2018-09-03 12:18:23 +08:00
鉴于你是转 Java 所以应该是 git 白学了。
|
4
inhzus 2018-09-03 12:23:18 +08:00 via Android
非要类比也只能算作 submodules
|
5
linjianru 2018-09-03 12:23:49 +08:00 7
Git 解决的问题是分布式环境下代码的变更历史追踪问题。其他你列举的这几个,则是解决软件高度模块化后的依赖管理问题。
这两者内部唯一的相似点是都使用了 Graph 来描述关系,但 Git 内部主要是有向无环图;其他这几个则由于需要考虑循环依赖问题,从而可能使用了有环的图。除此之外,我暂时想不起来还有什么相似点。 另外,你提到可以用 Shell + Git 来实现一部分替代功能,是可行的,但这其实就是开发一个新的包管理系统而已,工作量并不小,需要考虑的问题有很多。可以写了玩玩当作学习。 |
6
geeti 2018-09-03 12:48:08 +08:00
这个问题就好像 有了笔记本为什么还需要自行车 一样
|
8
ipwx 2018-09-03 12:50:06 +08:00 via iPhone
C#有 nuget,你没用过嘛?
|
9
vjnjc 2018-09-03 12:58:15 +08:00
对也不对。
假如你把 lib 放到 git 上去,那么用 git pull lib 就够了。 但一般不这么做,为了解决很多依赖问题还是要上 gradle,根据 gradle 配置从 mvn repo 下 lib~ |
10
Cbdy 2018-09-03 13:00:46 +08:00 via Android
ant、maven、gradle 对标的是 npm+webpack
|
11
lfzyx 2018-09-03 13:40:28 +08:00
Java 的 build 工作在国内一般是 devops 负责,什么时候敢让你们业务开发工程师负责了。
|
12
passerbytiny 2018-09-03 13:58:39 +08:00
你只能怪微软帮你做的太好了,抛开 visual studio,C++开发也要用 makefile 构建。
Android 包下不来是墙的原因,谷歌也有问题,android studio 只有 http 代理,但 gradle 只能使用 sockt 代理,坑的一笔。至于你想不依赖网络,说明你版本升级的慢,依赖包能几年都不升级版本的。 你最后一点是个伪命题,大公司不管开发啥,都不可能让编码人员负责最终构建和发布。你把大公司的 C 系列,跟小公司的 Java 开发对比,就跟前不久的国产操作系统跟 windows 对比一样。 |
13
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,因为有缺陷,管理不够精细。 |
14
chunwang1995 2018-09-03 14:46:58 +08:00
Maven/Gradle 是 “ Java 工程化”的工具组,正如盖房子一样,只有瓦工或者电工是无法盖成整栋的房子的,而需要“管理工具”粘合各项基本能力,Maven / Gradle 是“工程化”胶水,Git 更像是“开发流程化”胶水。
|
15
thisisgpy 2018-09-03 16:45:49 +08:00
为什么有了雷锋,还需要雷峰塔
|
16
Rizio 2018-09-03 17:07:09 +08:00
为什么有老虎了还要老虎钳
|
17
licoycn 2018-09-03 17:17:32 +08:00
为什么有了计算器还要有计算机
|
18
precisi0nux 2018-09-03 17:53:28 +08:00 via iPhone
为什么有了老婆饼,还需要老婆。
为什么有了 Java,还需要 JavaScript。 |
19
wowo243 2018-09-03 17:59:40 +08:00
楼歪了,我正一下。理论上是的,如果只用 git 的话,手动版本就是各种导包,自动化版本就是 shell 脚本执行各种下载、移动文件命导包。ant 没用过,mavne 的主要功能是依赖管理,最主要的目的就是替代各种引入 jar 包的繁琐过程。而 git 的主要作用是代码管理。
|
20
wowo243 2018-09-03 18:00:39 +08:00
菜鸡一枚,有大佬发现错误欢迎指正。
|
21
keymao 2018-09-04 08:49:54 +08:00
一个是版本控制工具,用于管理团队化开发时,代码的整合。
另外几个是用来管理你开发环境的依赖,和自动化构建的。 是两类东西。 |
22
fumichael 2018-09-04 09:39:50 +08:00
你可以把依赖都做版本管理啊,只是耗硬盘耗网络呀
公共的库,package 各自下载就好,所以版本管理只需要记录依赖关系就足够了 btw,前端开发,那个把 node_modules 都上传的给我站出来。 |