Действительно ли сделать Ruby Gems аналогом Java JAR? - PullRequest
15 голосов
/ 27 апреля 2009

Полагаю, я поставил вопрос достаточно четко и сжато. Почему я спрашиваю?

Я должен рассказать студентам об инфраструктуре Ruby on Rails, и для этого нужно провести некоторые аналогии с миром Java (поскольку курс довольно ориентирован на Java) У меня нет практического опыта работы с Ruby on Rails, но я чувствую, что аналогия с Gem / Jar верна.

Может ли кто-нибудь пролить свет на этот вопрос?

Ответы [ 3 ]

26 голосов
/ 27 апреля 2009

В качестве краткого ответа я бы сказал: Да, это действительно.

В качестве длинного ответа я бы сказал: да, он действителен, но есть некоторые важные различия, которые вы также можете описать.

У банки есть некоторые качества, которые сильно отличают ее от драгоценного камня. JAR - это упакованные исполняемые библиотеки, от которых обычно требуется явное объявление зависимости при выполнении программы Java во время вызова (путем объявления jar как зависимости при вызове интерпретатора java). В банке реализована небольшая структура, за исключением нескольких четко определенных мест для файлов (например, структура каталогов должна отражать путь пакета).

Gem - это дескриптор для постоянной установки библиотеки в систему, а также пакет функций, предоставляемый для объявления зависимости во время выполнения. Gem имеет строгий синтаксис контроля версий как часть своего определения, и самоцветы, как правило, распространяются из нескольких централизованных репозиториев, которые тратят приличное количество усилий для обеспечения уникальности в именах гемов. Драгоценные камни могут явно объявить свои зависимости от других драгоценных камней. (Сравните с JAR-файлами, где вы должны убедиться, что у вас есть все зависимости для jar-файла, удовлетворенного во время вызова, а jar-файлы не принимают на себя ответственность за объявление зависимости ИЛИ разрешение). Кроме того, в инструмент gem встроены некоторые дополнительные функции, которые могут быть весьма удобными, например, вы можете объявить исполняемый файл по умолчанию для вызова gem, если пользователь хочет «запустить gem», и вы можете объявить набор для модульного тестирования. для драгоценного камня, чтобы пользователь, устанавливающий драгоценный камень, мог гарантировать его функциональность.

Также вы можете захотеть рассказать своим студентам, что RubyGems - это инструмент, созданный независимо от самого языка Ruby, и что он выигрывает после многих неудобств и жалоб, возникающих из-за управления jar-файлами, которые хорошо проявились в годы разработки Java. .

3 голосов
/ 27 апреля 2009

Я не уверен, что это так просто ...

Я думаю, что самоцвет - это то же самое, что и баночка, но у самоцвета должны быть имя и версия, у банки этого нет, хм, скажем ..., ограничений.

Механизм Jar создан для упаковки и только для упаковки. Самым важным, ИМХО, в Gem является проект RubyGems Набор функций RubyGems немного больше, чем просто упаковка, включает в себя распространение и установку пакета.

Я думаю, что механизм распространения и установки Apache Maven - самое близкое, что есть у сообщества Java от Ruby Gems.

2 голосов
/ 27 апреля 2009

Как простое объяснение, сравнивать их с JAR-файлами достаточно для базового класса Ruby. Для более подробного объяснения см. Ответ holychao. Мне приходит в голову, что Gem для Ruby - это то же, что CPAN для Perl.

...