Должен ли я попытаться повторно использовать код Ruby в проекте Java? - PullRequest
1 голос
/ 25 февраля 2010

Я бы предпочел не «изобретать велосипед», и я нашел проект Ruby, который обеспечивает необходимую функциональность в моем приложении Java (не существует ранее существующего проекта Java, который бы делал то, что мне нужно - поверьте мне, я посмотрел ). Итак, в лучшем случае, я могу запустить код Ruby из своего кода Java (аля JSR223).

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

Ответы [ 4 ]

2 голосов
/ 25 февраля 2010

JRuby - это надежная платформа, которая хорошо интегрируется с Java. Но Rubygems не так хорошо интегрируются с инструментами сборки Java.

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

Если все гемы (и все их зависимости) являются чистым Ruby, технически возможно использовать их из JRuby, но у вас будут проблемы с их упаковкой в ​​JAR, так что среда выполнения JRuby сможет найти им.

2 голосов
/ 25 февраля 2010

В основном я бы сказал нет из-за сложности. Хотя это субъективно, я бы лично все-таки предпочел переписать его - вы можете внести улучшения, а когда закончите, вы поймете это лучше.

1 голос
/ 26 марта 2010

Я повторно использовал Java-код от JRuby, я не понимаю, почему это не может пойти обоими путями.

Еще одна мысль, можете ли вы запустить код Ruby, а затем просто подключить веб-сервис или набор веб-сервисов для вызова из приложения Java? Sinatra делает смехотворно простым написание оболочки для веб-службы для кода ruby. И у Java нет недостатка в инструментах для вызова веб-сервисов.

1 голос
/ 25 февраля 2010

Один из вариантов, который вы могли бы рассмотреть, - это разделить ваше приложение на две части, которые взаимодействуют, используя что-то вроде pipe / files (или просто stdin и stdout) или какой-то механизм RPC. То, имеет ли смысл подобный подход, действительно зависит от того, что делает библиотека Ruby - создание интерфейса между двумя приложениями может быть более сложным, чем реальное воплощение вещей в Java.

...