`

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

    博客分类:
  • Ruby
阅读更多
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目录下,供分析用。


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

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

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

相关推荐

    JAVA程序员必读--基础篇.chm

    JAVA程序员必读--基础篇.chm

    2022年最新高质量java程序员简历-22篇.rar

    2022年最新高质量java程序员简历-22篇2022年最新高质量java程序员简历-22篇2022年最新高质量java程序员简历-22篇2022年最新高质量java程序员简历-22篇2022年最新高质量java程序员简历-22篇2022年最新高质量java...

    java程序员必读--基础篇

    "java程序员必读--基础篇"的主题聚焦在Java语言的核心概念和基础用法上,旨在帮助读者建立起坚实的Java编程基础。 首先,我们要理解Java的特性,包括其跨平台性("Write Once, Run Anywhere"),垃圾回收机制,以及...

    简历模板-程序员-通用-精选

    简历模板-程序员-通用-精选简历模板-程序员-通用-精选简历模板-程序员-通用-精选简历模板-程序员-通用-精选简历模板-程序员-通用-精选简历模板-程序员-通用-精选简历模板-程序员-通用-精选简历模板-程序员-通用-精选...

    JAVA程序员必读--基础篇

    在"JAVA程序员必读--基础篇"中,你可能会学到如何编写和运行第一个Java程序,这通常是从输出“Hello, World!”开始。这涉及到创建一个公共类(public class),以及包含main方法,因为Java程序的执行始于main方法。 ...

    JAVA程序员之路-----看专业程序员的成长之路

    本文将从JAVA的基础到高级应用进行详细介绍,并分享如何成为一名专业的JAVA程序员。 #### Java基础学习 Java是由Sun Microsystems公司在1995年发布的,自诞生以来就受到了广泛的关注与应用。随着技术的发展,Java...

    程序员简历模板-软件工程师

    程序员简历模板-软件工程师程序员简历模板-软件工程师程序员简历模板-软件工程师程序员简历模板-软件工程师程序员简历模板-软件工程师程序员简历模板-软件工程师程序员简历模板-软件工程师程序员简历模板-软件工程师...

    JAVA程序员必读--基础篇.rar

    "JAVA程序员必读--基础篇.rar"这个压缩包文件显然是为那些希望深入理解Java语言基础的新手准备的。下面将详细讨论Java编程的基础知识,包括其重要性、基本概念以及学习路径。 首先,Java语言的基础至关重要,因为它...

    JAVA程序员必读-----基础篇

    JAVA是有SUN公司开发的新一代编程语言,它可以用在各种不同的机器、操作系统的网络环境中...所以作为Internet应用的开发技术人员不可不看JAVA,而JAVA程序不可不先从基础学起,这正是JAVA程序员必读:基础篇的用意。

    java程序员简历-14套(含高级工程师,项目经理,架构师等相关经验).rar

    java程序员简历-14套(含高级工程师,项目经理,架构师等相关经验)java程序员简历-14套(含高级工程师,项目经理,架构师等相关经验)java程序员简历-14套(含高级工程师,项目经理,架构师等相关经验)java程序员...

    Android高薪之路:Android程序员面试宝典-李宁(高清PDF完整版)_part2

    Java程序员面试宝典(第二版)-欧立奇(PDF扫描版) Java程序员面试宝典-杨磊(高清PDF扫描版)、 程序员面试宝典(第四版)-欧立奇(完整文字版)、 程序员面试金典(第5版)-英文版(高清PDF)、 程序员面试金典...

    Android高薪之路:Android程序员面试宝典-李宁(高清PDF完整版)_part1

    Java程序员面试宝典(第二版)-欧立奇(PDF扫描版) Java程序员面试宝典-杨磊(高清PDF扫描版)、 程序员面试宝典(第四版)-欧立奇(完整文字版)、 程序员面试金典(第5版)-英文版(高清PDF)、 程序员面试金典...

    Java程序员面试宝典-第4版.epub

    《Java程序员面试宝典》-第4版-中文版,epub电子书,下载EPUB File Reader软件即可查看,内容可拷贝

    Java程序员面试笔试宝典-何昊pdf版

    根据提供的文件信息,我们可以推断出这是一本关于Java程序员面试和笔试准备的书籍,作者为何昊。本书可能包含了大量关于Java编程语言的基础知识、高级特性以及与面试相关的技巧和策略等内容。下面将对可能涉及的重要...

    程序员之路--->项目管理知识2

    程序员之路--->项目管理知识2 程序员之路--->项目管理知识2 程序员之路--->项目管理知识2

    Java 程序员眼中的 Linux - v1.0.pdf

    Java 程序员眼中的 Linux - v1.0.pdf 本文档详细介绍了 Linux 操作系统的基础知识和实践经验,涵盖了 Linux 的安装、设置、常用命令、文件系统、网络管理、安全配置等方面的内容,同时也涉及到了 Java 开发相关的...

    Java程序员面试资料及简历模版

    Java程序员面试资料及简历模版 Java程序员面试资料及简历模版 Java程序员面试资料及简历模版 Java程序员面试资料及简历模版 Java程序员面试资料及简历模版 Java程序员面试资料及简历模版 Java程序员面试资料及简历...

    程序员单页简历模板-92篇.rar

    程序员单页简历模板-92篇程序员单页简历模板-92篇程序员单页简历模板-92篇程序员单页简历模板-92篇程序员单页简历模板-92篇程序员单页简历模板-92篇程序员单页简历模板-92篇程序员单页简历模板-92篇程序员单页简历...

    程序员表白系列--婚礼篇

    程序员表白系列--婚礼篇;

Global site tag (gtag.js) - Google Analytics