是否有必要抛弃 Maven 之类的项目构建工具? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
profoundexplorer
V2EX    程序员

是否有必要抛弃 Maven 之类的项目构建工具?

  profoundexplorer 2016-11-02 21:54:46 +08:00 8137 次点击
这是一个创建于 3313 天前的主题,其中的信息可能已经有所发展或是发生改变。

事情是这样的,在公司内部,两个项目小组都用 Maven ,我在其中,但是另一个小组(不在前面两个小组之内)的同事反对使用 Maven ,他建议使用原始的方式,将第三方 jar 包直接放到工程代码里,代码和 jar 包一起放到 git 里做版本管理。

这样有必要吗?

注意,并不是问是否有必要抛弃 Maven 而转向其他工具例如 gradle 等,而是问是否有必要抛弃这一类项目构建工具。

个人认为, Maven 并没有降低生产力,只是稍微有点学习成本,这点学习成本其实也非常低,此外它能很方便地管理第三方包依赖,简化代码库,显著提高生产效率。

希望大家说说自己的看法。

72 条回复    2016-11-04 16:35:35 +08:00
monsoon
    1
monsoon  
   2016-11-02 22:08:14 +08:00
转 Gradle 。而且 Gradle 导入本地的 jar 比 Maven 方便 500 倍。
放 jar 来版本管理是 15 年前的做法……
ixiaohei
    2
ixiaohei  
   2016-11-02 22:17:51 +08:00
gradle 底层还是 maven 那堆东西,坐标,插件。用 gradle 更增加团队学习成本,你要是用回 ant 那种最原始,好多新手估计搭建一个项目去找 jar 包,估计就得花很久,还不一定能搭起来那就 233 了,另外 maven 这种工具长处在构建,等你们用上持续构建你就知道还是得用 maven 。
lightening
    3
lightening  
   2016-11-02 22:21:38 +08:00   1
他是从 15 年前穿越过来的吧?
fovecifer
    4
fovecifer  
   2016-11-02 22:28:57 +08:00   2
在我看来 jar 包是二进制文件(实际上应该不全是),用 git 等源码管理工具来管理二进制数据本来就是作死

PS :最反感的就是你说的这种同事, maven 起码算是目前的最佳实践之一,他就没想过为什么吗?觉得就自己牛
其他无数的开发者都是傻 X ? 连这么点新鲜事物都不能接受 这是作为开发者最基本素质的缺失
zpf124
    5
zpf124  
   2016-11-02 22:52:51 +08:00
嗯很强...
我们项目 jar 不算多也不算少,大概有 500M 左右的了,算上图片啥的差不多快 1G 。
往 git 仓库里塞将近 1G 数据,嗯很强... 新检出一个项目爽到爆。
另外手动解决依赖也爽到爆。
plqws
    6
plqws  
   2016-11-02 22:55:08 +08:00
说白了要么蠢不会 maven 或者要么懒 懒得用,真不知道直接放 jar 有什么好处
murmur
    7
murmur  
   2016-11-02 22:57:40 +08:00   1
刚开始看还以为要用 gradle
后来看直接拷贝 jar 包就呵呵了
funky
    8
funky  
   2016-11-02 22:59:45 +08:00
maven 长处在构建。放弃 maven 工作效率会降低不少
eimsteim
    9
eimsteim  
   2016-11-02 23:04:21 +08:00
如果直接导 jar 真的那么好,为什么 Maven 和 Gradle 会出现?另外, git 是做代码的版本管理的,不是用来存 jar 包的。
PEP4JASON
    10
PEP4JASON  
   2016-11-02 23:04:24 +08:00
问题不是说用什么方法构建项目 而是沟通
billlee
    11
billlee  
   2016-11-02 23:05:54 +08:00   2
不是蠢就是懒
kingcos
    12
kingcos  
   2016-11-02 23:09:47 +08:00 via iPhone
直接拷贝太麻烦了,还经常容易出错,或者版本问题
Maven Gradle 都可以直接解决,就是看网络了
uxstone
    13
uxstone  
   2016-11-02 23:15:43 +08:00
提用 jar 的那位是组长吗?
不是的话,就当他放了个屁...
echo1937 /td>
    14
echo1937  
   2016-11-02 23:28:19 +08:00
这个开发是谁招进来的?
zhuangzhuang1988
    15
zhuangzhuang1988  
   2016-11-02 23:36:44 +08:00
不能放弃
SoloCompany
    16
SoloCompany  
   2016-11-03 00:27:56 +08:00 via iPhone
1. 沟通
2. 至少要搭个 nexus mirror 解决 gfw 的问题,或者直接用国内现成的 mirror
yidinghe
    17
yidinghe  
   2016-11-03 01:04:02 +08:00 via Android
在你同事看来,项目的依赖包一旦确定就不会改了,但实际上不是这样,特别是公司自己开发的包,经常会有更新。如果几个项目都用的话,统一发布一起更新是最便捷的。
aias
    18
aias  
   2016-11-03 01:23:32 +08:00 via Android
不管怎样,先说一声 Gradle 大法好!
bombless
    19
bombless  
   2016-11-03 01:50:43 +08:00 via Android
不知道你们那什么情况,不过包管理器还是很顺手的。

感觉如果不是写业务代码而是写一些基础设施,还是可以抛弃包管理器的,哈哈
ljcarsenal
    20
ljcarsenal  
   2016-11-03 02:03:08 +08:00 via Android
这么多 java 开发者啊
vietor
    21
vietor  
   2016-11-03 07:59:41 +08:00 via Android
SBT 还是比较简单的
profoundexplorer
    22
profoundexplorer  
OP
   2016-11-03 08:05:46 +08:00
@vietor 死变态?舒伯特?苏炳添?
开个玩笑。
能查到 SBT 是什么
Troevil
    23
Troevil  
   2016-11-03 08:45:38 +08:00
当然 maven 大法好了 .
android 用 Gradle
其他 maven
hpeng
    24
hpeng  
   2016-11-03 08:54:13 +08:00 via iPhone
你们居然选择放弃先进生产力,回到刀耕火种的时代,佩服
mazyi
    25
mazyi  
PRO
   2016-11-03 09:03:08 +08:00
哈哈哈哈,快点同意他的意见让他们组把 jar 包全部上传上 git 啊,这样生产力得到了极大的保障!!!
zacard
    26
zacard  
   2016-11-03 09:07:10 +08:00
jar 依赖问题搞死他。。。
faywong8888
    27
faywong8888  
   2016-11-03 09:08:59 +08:00 via Android
这个公司的技术 leader 应该好好学习下!
VeryEase
    28
VeryEase  
   2016-11-03 09:09:39 +08:00
用 maven 有什么不好, 哪个顺手用哪个, 你们居然没有能拍板的人把这些事情定下来。
tabris17
    29
tabris17  
   2016-11-03 09:10:36 +08:00
这人是个智障
cedoo
    30
cedoo  
   2016-11-03 09:23:00 +08:00
安卓用 gradle ,其它用 maven ,恩,没错!
brucefeng
    31
brucefeng  
   2016-11-03 09:24:00 +08:00
可以自己公司内部建一个 maven repository ,这样也可以把公司自己开发的 jar 放在里面,就没必要在项目内部保留 jar 包了
twogoods
    32
twogoods  
   2016-11-03 09:26:15 +08:00 via Android
你要面试的时候这么说估计...
tony1016
    33
tony1016  
   2016-11-03 09:30:44 +08:00
你只需要简单的告诉他,请帮我在 spring 的官网上,下载一个 spring 的 jar 包,他就傻眼了
wupher
    34
wupher  
   2016-11-03 10:00:31 +08:00
1. 很多小公司仍然采用传统 Jar 管理模式。好处是项目 clone 之后,马上即可编译运行。缺点是要人工解决 Library 包依赖问题,明明 Maven , Gradle 都可以自动解决的。如果需要自动编译支持,一般采用 Ant 脚本方式。十分古老的版本管理方式。不过,小公司的项目经常是不断重复,经常是将旧项目拷贝,再翻一版, Lib 包永不升级,这么干于它而言更方便。

2. 使用 Maven 、 Gradle ,甚至在公司自建私有 Repository 。相对现代且自动化得多。大多数 Github 上的 Java 项目使用此种方式来管理包依赖。优点:主流,自动化解决依赖,对于 CI 等开发工具支持最好。缺点:自从 Maven 的 OSC 镜像关闭以来,你最好能有个代理。
swim2sun
    35
swim2sun  
   2016-11-03 10:31:31 +08:00
难以置信... 这是在开倒车
ccjeaty
    36
ccjeaty  
   2016-11-03 11:01:05 +08:00 via iPhone
问问他为什么啊,贴出来大家学习学习
lytofb
    37
lytofb  
   2016-11-03 11:16:12 +08:00
要么远离这种同事,要么成为他们的上司
cjyang1128
    38
cjyang1128  
   2016-11-03 11:16:13 +08:00
可能你那个同事比较恶心 Maven 的依赖传递吧
enenaaa
    39
enenaaa  
   2016-11-03 11:27:40 +08:00 via iPad
其实我也比较讨厌签完代码后还要等半天下依赖库的
v2orz
    40
v2orz  
   2016-11-03 11:32:13 +08:00
等他什么时候导出 baidu/google 到 jar 下载到工程中,结果弄到一个被恶意改动的文件,最后搞出大新闻,他就会吸取教训了
而且手动复制 jar ,用不了几个月没人能说明白 lib 下面一堆文件分别是干嘛的了,亲身体验
lawrencexu
    41
lawrencexu  
   2016-11-03 11:33:20 +08:00
之前我司一个老项目就是用 Ant 这么搞的,我花了三个月时间把上万行的 Ant 脚本转成了 Maven 编译,之后才有了一系列的技术改进和升级,单用 Ant 根本没法搞,也许加上 Ivy 可以。
tomczhen
    42
tomczhen  
   2016-11-03 11:34:36 +08:00   2
小孩子才分对错,成年人只看利弊。

我反正是很反感一些人上来就先贴个标签,带个帽子然后把别人批判一番这跟以前的红卫兵小毛孩有什么区别?

技术选型、推进说白还是博弈,每个人的利益点不同。当然,有些人就根本不是理性经济人,这种人你就不要和他一般见识就好了。

如果当前项目管理方式没有问题,或者问题还不大大不了加加班,也能解决。作为管理层,如果新技术不能带来“利益”自然是没什么动力推进的,再说了,很多混到管理的“大龄前码农”,下班了还得去抱老婆带孩子。学习成本再低那也是成本,而且风险再低那也是风险不是?

作为下面的码农,这些依赖管理工具, CI 理念又不能直接加工资,毕竟大多数公司招人最重要的还是靓丽的履历表,那些高大上的技术关键字才符合 HR 的基本价值观。

道不同不相为谋。楼主稍微推一下就行了,公司项目代码管理什么的就别掺和了。该继续加强自己就继续,没什么加强的就准备换换环境就算没法改变世界,改变一下自己还是可以的。
youxiachai
    43
youxiachai  
   2016-11-03 11:37:19 +08:00
你的同事..还活在 20 年前的世界...
firefox12
    44
firefox12  
   2016-11-03 11:1:38 +08:00
如果没有内部的仓库 懂的人不多, 的确直接 jar 包更好。这是基础建设,长期的收益大很多!
ooTwToo
    45
ooTwToo  
   2016-11-03 12:15:56 +08:00 via iPhone
OMG …
Ouyangan
    46
Ouyangan  
   2016-11-03 12:20:18 +08:00
建议辞职~~
Miy4mori
    47
Miy4mori  
   2016-11-03 12:26:04 +08:00
不知而不知其不知者,愚者也避之!
twiceyuan
    48
twiceyuan  
   2016-11-03 12:26:59 +08:00
@enenaaa 所以你喜欢签半天代码吗? \_(ツ)_/
reeco
    49
reeco  
   2016-11-03 12:39:52 +08:00
远离这类同事,没有必要解释
Chrisplus
    50
Chrisplus  
   2016-11-03 12:58:09 +08:00
Gradle 底下也是 maven 那一套。

"Maven 并没有降低生产力", maven 是在提高生产力好么?当然也要看项目的具体情况。假如引用的外部 jar 包长期不需要更新且稳定,也不妨放个 jar 包进去。但是有长期不需要更新且稳定的东西么,还是说你们这个项目一个月做完,然后交付收工,今后再无瓜葛?

楼上说的对,远离这类同事。
lululau
    51
lululau  
   2016-11-03 13:10:43 +08:00 via iPhone
这就是不会用吧,啥也不想学,拷贝 jar 估计 cp 命令也不会用,只会 Windows 资源管理器里 Ctrl-c 的那种
lululau
    52
lululau  
   2016-11-03 13:11:10 +08:00 via iPhone
竟然会用 git ,真不信!
0915240
    53
0915240  
   2016-11-03 13:57:06 +08:00
我以为是要转 gradle 或者 sbt 。。。
aaronmix
    54
aaronmix  
   2016-11-03 14:04:17 +08:00
maven 跟 gradle 在 dependency 管理上都差不多,但是 gradle 比 maven 强在 build script 是可编程的,而 maven 是 xml ,灵活性不够。以前经常是 maven xml+各种插件+自己写的一些脚本,用 gradle 直接可以把脚本写在 build script 了,方便很多。
至于 jar 是不是在 local ,其实 google/fb 的 build system(buck/blaze)都是保存在 local 的,主要是为了 performance 考虑。
forbreak
    55
forbreak  
   2016-11-03 14:12:49 +08:00
我们公司之前的也是不用 maven ,后面教他们用了之后,刚开始都是各种抵触。然后后对公司项目进行整体升级改进的时候,都体会到了好处。
intsilence
    56
intsilence  
   2016-11-03 14:32:17 +08:00
建议开倒车的同事一定非蠢即坏。
billwang
    57
billwang  
   2016-11-03 14:57:10 +08:00
我其实想问一下大家都用 maven 的什么 mirror ?现在的好慢
ibeyond
    58
ibeyond  
   2016-11-03 15:26:19 +08:00
在大家看来,写 MakeFile 的可能都是顽固不化的老怪物了。。。
uxstone
    59
uxstone  
   2016-11-03 15:27:40 +08:00   2
@billwang
用 uk 和阿里云

如果实在太慢就 -DsocksProxyHost=127.0.0.1 -DsocksProxyPort=1080 走代理,
tracymcladdy
    60
tracymcladdy  
   2016-11-03 15:34:38 +08:00 via Android
远离这种同事+1
1120101929
    61
1120101929  
   2016-11-03 15:38:15 +08:00   1
@billwang 阿里云
1120101929
    62
1120101929  
   2016-11-03 15:40:30 +08:00
单说一点,人工管理 jar 包,想看源码怎么办
evlos
    63
evlos  
   2016-11-03 15:42:49 +08:00 via iPhone
智障同事
JohnSmith
    64
JohnSmith  
   2016-11-03 15:49:58 +08:00
方向盘都扔了,一脚油门到底,直道没啥问题,遇到弯道 GG
Ouyangan
    65
Ouyangan  
   2016-11-03 16:41:22 +08:00
@billwang
```
<repository>
<id>mvnrepository</id>
<name>mvnrepository</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<layout>default</layout>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
```
Ouyangan
    66
Ouyangan  
   2016-11-03 16:42:04 +08:00
@1120101929 手动下载源码包,再关联
feifeifei
    67
feifeifei  
   2016-11-03 16:46:11 +08:00
都行吧
如果版本不复杂
如果项目不多
如果。。。。他们高兴呗
都可以,哈哈哈
bdnet
    68
bdnet  
   2016-11-03 17:20:23 +08:00
少挖点坑吧,除非自己有兴趣和能力可以写个比 Maven 、 Gradle 更好的构建工具
TJT
    69
TJT  
   2016-11-03 19:29:39 +08:00   1
生命周期短,复杂度低的项目哪个顺手用那个就好了。
但如果条件允许,优先使用 Gradle 其次 Maven ,网速慢就搭一个私服或者用国内的 Mirror ,好处肯定比坏处多的。
MiYogurt
    70
MiYogurt  
   2016-11-04 00:54:23 +08:00
-.- sbt 都出来了,这不是 scala 的玩意么。
hnpyhyz
    71
hnpyhyz  
   2016-11-04 10:32:14 +08:00
请远离这种同事+1
Todd_Leo
    72
Todd_Leo  
   2016-11-04 16:35:35 +08:00
sbt = sloooooooow/stupid build tool
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     893 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 27ms UTC 19:44 PVG 03:44 LAX 11:44 JFK 14:44
Do have faith in what you're doing.
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86