Действительно ли сделать Ruby Gems аналогичным Java JAR?

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

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

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

Ответы

Ответ 1

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

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

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

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

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

Ответ 2

Я не уверен, что это легко...

Я думаю, что Gem - это в основном то же самое, что и jar, но у Gem должен быть имя и версия, у jar нет этого, hm, let say..., ограничения.

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

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

Ответ 3

Как простое объяснение, сравнивающее их с JAR, достаточно для базового класса Ruby. Для более подробного объяснения см. Ответ святого. Анализ, который приходит мне на ум, - это то, что Gem - это Ruby, что CPAN для Perl.