首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  程序员

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

  •  
  •   shayuvpn0001 · 2018-09-03 12:07:48 +08:00 · 3661 次点击
    这是一个创建于 458 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    22 回复  |  直到 2018-09-04 09:39:50 +08:00
        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
    这个问题就好像 有了笔记本为什么还需要自行车 一样
        7
    zn   2018-09-03 12:48:57 +08:00 via iPhone
    @geeti 还要啥自行车?
        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 都上传的给我站出来。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3982 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 25ms · UTC 03:56 · PVG 11:56 · LAX 19:56 · JFK 22:56
    ♥ Do have faith in what you're doing.