16

我相信我已经非常清楚和简洁地提出了这个问题。我为什么要问?

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

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

4

3 回答 3

28

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

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

罐子有一些特质,使它与宝石有很大不同。JAR 是打包的可执行库,您通常必须在调用时在 Java 程序的执行中显式声明依赖项(通过在调用 java 解释器时将 jar 声明为依赖项)。除了一些定义良好的文件位置(例如,目录结构必须镜像包路径)之外,jar 几乎没有强制执行它的结构。

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

此外,您可能想向您的学生描述 RubyGems 是一个独立于 Ruby 语言本身创建的工具,并且在多年的 Java 开发中充分暴露了管理 jar 引起的许多不便和抱怨之后,它受益匪浅。

于 2009-04-27T16:59:22.130 回答
3

我不确定是不是很容易...

我觉得 Gem 和 jar 基本上是一样的,但是 Gem 必须有名字和版本,jar 没有这个,嗯,比方说……,限制。

Jar 机制是为打包而创建的,并且只是为了打包。恕我直言,Gem 中最重要的是 RubyGems 项目 RubyGems 功能集比打包要大一些,涉及到包分发和安装。

我认为 Apache Maven 分发和安装机制是 Java 社区与 Ruby Gems 最接近的东西。

于 2009-04-27T16:49:20.813 回答
2

作为一个简单的解释,将它们与 JAR 进行比较对于基本的 Ruby 类来说已经足够了。有关更详细的解释,请参阅 Holychao 的答案。我想到的一个比喻是,Gem 之于 Ruby,就像 CPAN 之于 Perl。

于 2009-04-27T17:10:49.310 回答