事情是这样的,在公司内部,两个项目小组都用 Maven ,我在其中,但是另一个小组(不在前面两个小组之内)的同事反对使用 Maven ,他建议使用原始的方式,将第三方 jar 包直接放到工程代码里,代码和 jar 包一起放到 git 里做版本管理。
这样有必要吗?
注意,并不是问是否有必要抛弃 Maven 而转向其他工具例如 gradle 等,而是问是否有必要抛弃这一类项目构建工具。
个人认为, Maven 并没有降低生产力,只是稍微有点学习成本,这点学习成本其实也非常低,此外它能很方便地管理第三方包依赖,简化代码库,显著提高生产效率。
希望大家说说自己的看法。
1
monsoon 2016-11-02 22:08:14 +08:00
转 Gradle 。而且 Gradle 导入本地的 jar 比 Maven 方便 500 倍。
放 jar 来版本管理是 15 年前的做法…… |
2
ixiaohei 2016-11-02 22:17:51 +08:00
gradle 底层还是 maven 那堆东西,坐标,插件。用 gradle 更增加团队学习成本,你要是用回 ant 那种最原始,好多新手估计搭建一个项目去找 jar 包,估计就得花很久,还不一定能搭起来那就 233 了,另外 maven 这种工具长处在构建,等你们用上持续构建你就知道还是得用 maven 。
|
3
lightening 2016-11-02 22:21:38 +08:00 1
他是从 15 年前穿越过来的吧?
|
4
fovecifer 2016-11-02 22:28:57 +08:00 2
在我看来 jar 包是二进制文件(实际上应该不全是),用 git 等源码管理工具来管理二进制数据本来就是作死
PS :最反感的就是你说的这种同事, maven 起码算是目前的最佳实践之一,他就没想过为什么吗?觉得就自己牛 其他无数的开发者都是傻 X ? 连这么点新鲜事物都不能接受 这是作为开发者最基本素质的缺失 |
5
zpf124 2016-11-02 22:52:51 +08:00
嗯很强...
我们项目 jar 不算多也不算少,大概有 500M 左右的了,算上图片啥的差不多快 1G 。 往 git 仓库里塞将近 1G 数据,嗯很强... 新检出一个项目爽到爆。 另外手动解决依赖也爽到爆。 |
6
plqws 2016-11-02 22:55:08 +08:00
说白了要么蠢不会 maven 或者要么懒 懒得用,真不知道直接放 jar 有什么好处
|
7
murmur 2016-11-02 22:57:40 +08:00 1
刚开始看还以为要用 gradle
后来看直接拷贝 jar 包就呵呵了 |
8
funky 2016-11-02 22:59:45 +08:00
maven 长处在构建。放弃 maven 工作效率会降低不少
|
9
eimsteim 2016-11-02 23:04:21 +08:00
如果直接导 jar 真的那么好,为什么 Maven 和 Gradle 会出现?另外, git 是做代码的版本管理的,不是用来存 jar 包的。
|
10
PEP4JASON 2016-11-02 23:04:24 +08:00
问题不是说用什么方法构建项目 而是沟通
|
11
billlee 2016-11-02 23:05:54 +08:00 2
不是蠢就是懒
|
12
kingcos 2016-11-02 23:09:47 +08:00 via iPhone
直接拷贝太麻烦了,还经常容易出错,或者版本问题
Maven Gradle 都可以直接解决,就是看网络了 |
13
uxstone 2016-11-02 23:15:43 +08:00
提用 jar 的那位是组长吗?
不是的话,就当他放了个屁... |
14
echo1937 2016-11-02 23:28:19 +08:00
这个开发是谁招进来的?
|
15
zhuangzhuang1988 2016-11-02 23:36:44 +08:00
不能放弃
|
16
SoloCompany 2016-11-03 00:27:56 +08:00 via iPhone
1. 沟通
2. 至少要搭个 nexus mirror 解决 gfw 的问题,或者直接用国内现成的 mirror |
17
yidinghe 2016-11-03 01:04:02 +08:00 via Android
在你同事看来,项目的依赖包一旦确定就不会改了,但实际上不是这样,特别是公司自己开发的包,经常会有更新。如果几个项目都用的话,统一发布一起更新是最便捷的。
|
18
aias 2016-11-03 01:23:32 +08:00 via Android
不管怎样,先说一声 Gradle 大法好!
|
19
bombless 2016-11-03 01:50:43 +08:00 via Android
不知道你们那什么情况,不过包管理器还是很顺手的。
感觉如果不是写业务代码而是写一些基础设施,还是可以抛弃包管理器的,哈哈 |
20
ljcarsenal 2016-11-03 02:03:08 +08:00 via Android
这么多 java 开发者啊
|
21
vietor 2016-11-03 07:59:41 +08:00 via Android
SBT 还是比较简单的
|
22
profoundexplorer OP |
23
Troevil 2016-11-03 08:45:38 +08:00
当然 maven 大法好了 .
android 用 Gradle 其他 maven |
24
hpeng 2016-11-03 08:54:13 +08:00 via iPhone
你们居然选择放弃先进生产力,回到刀耕火种的时代,佩服
|
25
mazyi 2016-11-03 09:03:08 +08:00
哈哈哈哈,快点同意他的意见让他们组把 jar 包全部上传上 git 啊,这样生产力得到了极大的保障!!!
|
26
zacard 2016-11-03 09:07:10 +08:00
jar 依赖问题搞死他。。。
|
27
faywong8888 2016-11-03 09:08:59 +08:00 via Android
这个公司的技术 leader 应该好好学习下!
|
28
VeryEase 2016-11-03 09:09:39 +08:00
用 maven 有什么不好, 哪个顺手用哪个, 你们居然没有能拍板的人把这些事情定下来。
|
29
tabris17 2016-11-03 09:10:36 +08:00
这人是个智障
|
30
cedoo 2016-11-03 09:23:00 +08:00
安卓用 gradle ,其它用 maven ,恩,没错!
|
31
brucefeng 2016-11-03 09:24:00 +08:00
可以自己公司内部建一个 maven repository ,这样也可以把公司自己开发的 jar 放在里面,就没必要在项目内部保留 jar 包了
|
32
twogoods 2016-11-03 09:26:15 +08:00 via Android
你要面试的时候这么说估计...
|
33
tony1016 2016-11-03 09:30:44 +08:00
你只需要简单的告诉他,请帮我在 spring 的官网上,下载一个 spring 的 jar 包,他就傻眼了
|
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 镜像关闭以来,你最好能有个代理。 |
35
swim2sun 2016-11-03 10:31:31 +08:00
难以置信... 这是在开倒车
|
36
ccjeaty 2016-11-03 11:01:05 +08:00 via iPhone
问问他为什么啊,贴出来大家学习学习
|
37
lytofb 2016-11-03 11:16:12 +08:00
要么远离这种同事,要么成为他们的上司
|
38
cjyang1128 2016-11-03 11:16:13 +08:00
可能你那个同事比较恶心 Maven 的依赖传递吧
|
39
enenaaa 2016-11-03 11:27:40 +08:00 via iPad
其实我也比较讨厌签完代码后还要等半天下依赖库的
|
40
v2orz 2016-11-03 11:32:13 +08:00
等他什么时候导出 baidu/google 到 jar 下载到工程中,结果弄到一个被恶意改动的文件,最后搞出大新闻,他就会吸取教训了
而且手动复制 jar ,用不了几个月没人能说明白 lib 下面一堆文件分别是干嘛的了,亲身体验 |
41
lawrencexu 2016-11-03 11:33:20 +08:00
之前我司一个老项目就是用 Ant 这么搞的,我花了三个月时间把上万行的 Ant 脚本转成了 Maven 编译,之后才有了一系列的技术改进和升级,单用 Ant 根本没法搞,也许加上 Ivy 可以。
|
42
tomczhen 2016-11-03 11:34:36 +08:00 2
小孩子才分对错,成年人只看利弊。
我反正是很反感一些人上来就先贴个标签,带个帽子然后把别人批判一番——这跟以前的红卫兵小毛孩有什么区别? 技术选型、推进说白还是博弈,每个人的利益点不同。当然,有些人就根本不是理性经济人,这种人你就不要和他一般见识就好了。 如果当前项目管理方式没有问题,或者问题还不大——大不了加加班,也能解决。作为管理层,如果新技术不能带来“利益”自然是没什么动力推进的,再说了,很多混到管理的“大龄前码农”,下班了还得去抱老婆带孩子。学习成本再低那也是成本,而且风险再低那也是风险不是? 作为下面的码农,这些依赖管理工具, CI 理念又不能直接加工资,毕竟大多数公司招人最重要的还是靓丽的履历表,那些高大上的技术关键字才符合 HR 的基本价值观。 道不同不相为谋。楼主稍微推一下就行了,公司项目代码管理什么的就别掺和了。该继续加强自己就继续,没什么加强的就准备换换环境——就算没法改变世界,改变一下自己还是可以的。 |
43
youxiachai 2016-11-03 11:37:19 +08:00
你的同事..还活在 20 年前的世界...
|
44
firefox12 2016-11-03 11:41:38 +08:00
如果没有内部的仓库 懂的人不多, 的确直接 jar 包更好。这是基础建设,长期的收益大很多!
|
45
ooTwToo 2016-11-03 12:15:56 +08:00 via iPhone
OMG …
|
46
Ouyangan 2016-11-03 12:20:18 +08:00
建议辞职~~
|
47
Miy4mori 2016-11-03 12:26:04 +08:00
不知而不知其不知者,愚者也——避之!
|
49
reeco 2016-11-03 12:39:52 +08:00
远离这类同事,没有必要解释
|
50
Chrisplus 2016-11-03 12:58:09 +08:00
Gradle 底下也是 maven 那一套。
"Maven 并没有降低生产力", maven 是在提高生产力好么?当然也要看项目的具体情况。假如引用的外部 jar 包长期不需要更新且稳定,也不妨放个 jar 包进去。但是有长期不需要更新且稳定的东西么,还是说你们这个项目一个月做完,然后交付收工,今后再无瓜葛? 楼上说的对,远离这类同事。 |
51
lululau 2016-11-03 13:10:43 +08:00 via iPhone
这就是不会用吧,啥也不想学,拷贝 jar 估计 cp 命令也不会用,只会 Windows 资源管理器里 Ctrl-c 的那种
|
52
lululau 2016-11-03 13:11:10 +08:00 via iPhone
竟然会用 git ,真不信!
|
53
0915240 2016-11-03 13:57:06 +08:00
我以为是要转 gradle 或者 sbt 。。。
|
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 考虑。 |
55
forbreak 2016-11-03 14:12:49 +08:00
我们公司之前的也是不用 maven ,后面教他们用了之后,刚开始都是各种抵触。然后后对公司项目进行整体升级改进的时候,都体会到了好处。
|
56
intsilence 2016-11-03 14:32:17 +08:00
建议开倒车的同事一定非蠢即坏。
|
57
billwang 2016-11-03 14:57:10 +08:00
我其实想问一下大家都用 maven 的什么 mirror ?现在的好慢
|
58
ibeyond 2016-11-03 15:26:19 +08:00
在大家看来,写 MakeFile 的可能都是顽固不化的老怪物了。。。
|
59
uxstone 2016-11-03 15:27:40 +08:00 2
|
60
tracymcladdy 2016-11-03 15:34:38 +08:00 via Android
远离这种同事+1
|
61
1120101929 2016-11-03 15:38:15 +08:00 1
@billwang 阿里云
|
62
1120101929 2016-11-03 15:40:30 +08:00
单说一点,人工管理 jar 包,想看源码怎么办
|
63
evlos 2016-11-03 15:42:49 +08:00 via iPhone
智障同事
|
64
JohnSmith 2016-11-03 15:49:58 +08:00
方向盘都扔了,一脚油门到底,直道没啥问题,遇到弯道 GG
|
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> ``` |
66
Ouyangan 2016-11-03 16:42:04 +08:00
@1120101929 手动下载源码包,再关联
|
67
feifeifei 2016-11-03 16:46:11 +08:00
都行吧
如果版本不复杂 如果项目不多 如果。。。。他们高兴呗 都可以,哈哈哈 |
68
bdnet 2016-11-03 17:20:23 +08:00
少挖点坑吧,除非自己有兴趣和能力可以写个比 Maven 、 Gradle 更好的构建工具
|
69
TJT 2016-11-03 19:29:39 +08:00 1
生命周期短,复杂度低的项目哪个顺手用那个就好了。
但如果条件允许,优先使用 Gradle 其次 Maven ,网速慢就搭一个私服或者用国内的 Mirror ,好处肯定比坏处多的。 |
70
MiYogurt 2016-11-04 00:54:23 +08:00
-.- sbt 都出来了,这不是 scala 的玩意么。
|
71
hnpyhyz 2016-11-04 10:32:14 +08:00
请远离这种同事+1
|
72
Todd_Leo 2016-11-04 16:35:35 +08:00
sbt = sloooooooow/stupid build tool
|