Java程序员学Ruby--从折腾开始

本文分享了一位Java程序员如何从Java转向Ruby的旅程,特别关注了在Ruby环境中配置环境、理解Gem与Maven的区别,以及解决依赖管理问题的经验。通过对比Java与Ruby的依赖管理方式,探讨了Gem在脚本语言中的作用和局限性,并最终通过升级Ruby版本解决了启动Rails应用时遇到的依赖冲突问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java程序员学Ruby--从折腾开始

这篇文章信息含量不高,基本上理解为吐槽+备忘就对了。

最近想自己做一点东西,但是实在厌倦了J2EE世界里数不清的xml,也在寻求一种“高效的开发语言”。基本上说到高效和敏捷,大家都在推崇Ruby on Rails,所以抽周末的空来尝个鲜。

学新语言,我一般喜欢先配置环境,弄几个短的snippet来看看,熟悉语法。于是就需要先配置环境。

Ruby本身的安装还算简单,下载一个rvm,然后安装就可以了。安装后ruby本身的包和gems都会放在/opt/local/lib/ruby下。但是当我下载了一个Rails的app Rabel,尝试部署并启动时,噩梦就开始了。

gem是Ruby包管理的一个工具,跟Maven类似。但是Java崇尚Compile Once,Run anywhere,所有的依赖管理都管理具体项目。而gem则是管理本地运行环境的,使用gem install gem_name可以将包安装到本地。这样虽然运行具体项目会痛苦一点,却也极大避免了多个项目的依赖冲突问题。

脚本语言都有个功能:本地扩展(Native Extension),跟Java里的JNI是一个意思。不过Java世界都崇尚pure Java,基本上依赖管理都是在jar包之间,完全是Maven可以搞定的。而脚本语言一般都秉承了UNIX世界的多模块混合的思想,经常使用本地扩展,例如xml解析,就使用libxml。安装本地库,就不是gem能搞定的事了。

在mac下,最好安装一个port或者brew,不然得自己去make install之类的,很麻烦。port更加强大一些,但是会傻乎乎的下载重复的依赖。例如我要下载一个mysql-ruby的库,它会先下载mysql、再下载ruby,最后再下载这个库,而其实我只需要一个ruby扩展而已。当然port下载一些C语言的库是很有用的,如sqlite3、libxml之类,省去了编译和查找依赖的过程,这个过程对于Java程序员来说真是太痛苦了。

在尝试使用rails server启动Rabel时,提示找不到nokogiri。使用gem install nokogiri安装之,发现缺少libxml依赖。后来使用port安装libxml之后,依然找不到。最后升级ruby版本之后,问题解决了。

gems安装比较好的地方是,即使没有安装成功,它也会将临时文件保存在/opt/local/lib/ruby/gems/1.8/gems/gem_name目录下,供分析用。


[b]ruby 的 gems 很普及,为什么 java 的 maven 用的不是很普及呢?[/b]

ruby的gems已经是集成到sdk里了,maven没有等同的地位。
这种境况是由于java在maven出现以前就有完备的包管理机制(classloader,package),开源社区也普遍遵循命名规则,没有依赖管理也不至于很惨。

ruby就不行了,用的还是很原始的include模式,没有gems世界会乱套的。
rubyer是不得不用gems,javaer是可用可不用,或者用ant、ivy、grape、buildr都行。当然得承认maven的复杂度比 gem要高许多(依赖管理只是maven要解决的一小部分问题,它着眼于整个项目过程),实施过程遇到的问题也会更多,所以maven的推行是一个很漫长的过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值