ruby-on-rails – 使Ruby Gems与Java JAR类似吗?

我相信我已经把这个问题清楚,简明扼要.为什么要问

我要向学生解释Ruby on Rails框架,这需要我对Java世界做一些比喻(因为课程是以Java为中心的).我没有Ruby on Rails的实践经验,但我感觉到Gem / Jar的类比是一个有效的.

任何人都有可能在这个问题上有更多的光明吗?

解决方法

作为一个简短的答案,我会说:是的,它是有效的.

作为一个很长的答案,它是有效的,但还有一些重要的区别,你可能想要描述.

一个罐子有一些品质,使它与宝石非常不同. JAR是打包的可执行库,您通常必须在调用时在Java程序的执行中显式声明依赖关系(通过在调用java解释器时将jar声明为依赖关系).除了几个明确定义的文件位置(例如,目录结构必须镜像包路径)之外,jar对其执行的结构很少.

宝石是一个用于将库永久性地安装到系统的描述符,以及在运行时可用于声明依赖关系的一系列功能.宝石具有严格的版本化语法作为其定义的一部分,并且宝石往往从少量集中的存储库中分布,这些存储库花费大量精力确保宝石名称中的唯一性.宝石可以明确地声明其依赖于其他宝石. (与JAR相对应,您必须确保您拥有在调用时满足的jar的所有依赖关系,而jar不明确地承担依赖关系声明或解析的责任).此外,gem工具中内置了一些非常方便的可选功能,例如,如果用户希望“运行gem”,您可以声明一个可以调用的默认可执行文件,您可以声明一个单元测试套件对于宝石,以便安装宝石的用户可以确保其功能.

另外,您可能想要向学生介绍RubyGems是独立于Ruby语言本身而创建的工具,并且受益于管理jar所产生的许多不便和投诉已经从多年的Java开发中得到很好的体现.

相关文章

以下代码导致我的问题: class Foo def initialize(n=0) @n = n end attr_accessor :n d...
这是我的spec文件,当为上下文添加测试“而不是可单独更新用户余额”时,我得到以下错误. require 's...
我有一个拦截器:DevelopmentMailInterceptor和一个启动拦截器的inititializer setup_mail.rb. 但我想将...
例如,如果我有YAML文件 en: questions: new: 'New Question' other: recent: ...
我听说在RSpec中避免它,let,let !,指定,之前和主题是最佳做法. 关于让,让!之前,如果不使用这些,我该如...
我在Rails中使用MongoDB和mongo_mapper gem,项目足够大.有什么办法可以将数据从Mongoid迁移到 Postgres...