将Ruby Gems与Java JAR类比是否有效?

Pet*_*háč 16 ruby programming-languages rubygems ruby-on-rails

我相信我已经非常清楚地以简洁的方式提出了这个问题.我为什么这么问?

我将向学生解释Ruby on Rails框架,这需要我对Java世界进行一些类比(因为该课程非常以Java为中心).我没有Ruby on Rails的实践经验,但我觉得Gem/Jar类比是有效的.

任何人都可以对这个问题有所了解吗?

ani*_*mal 27

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

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

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

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

另外,您可能想要向学生描述RubyGems是一个独立于Ruby语言本身创建的工具,并且它受益于许多不便之处和管理罐子引起的抱怨已经从多年的Java开发中暴露出来.