Должен ли я попытаться повторно использовать код Ruby в проекте Java?
Я бы предпочел не "изобретать велосипед", и я нашел проект Ruby, который обеспечивает необходимую функциональность в моем приложении Java (не существует ранее существовавшего проекта Java, который бы делал то, что мне нужно - поверь мне, я посмотрел). Итак, в лучшем случае, я могу запустить код Ruby из своего кода Java (аля JSR223).
Тем не менее, этот проект Ruby зависит от установки нескольких драгоценных камней. Меня совсем не интересует преобразование всего Java-приложения в приложение JRuby, но я бы хотел использовать этот проект. Есть ли простой способ загрузить код из драгоценного камня в ScriptEngine, или я просто спрашиваю о головной боли?
4 ответа
JRuby является надежной платформой и хорошо интегрируется с Java. Но Rubygems не так хорошо интегрируются с инструментами сборки Java.
Если какой-либо из драгоценных камней включает в себя собственный код C, то забудьте об этом, вы не можете использовать их из JRuby.
Если все гемы (и все их зависимости) являются чистым Ruby, технически возможно использовать их из JRuby, но у вас будут головные боли, упаковывающие их в JAR-файлы, чтобы среда выполнения JRuby могла их найти.
В основном я бы сказал нет из-за сложности. Хотя это субъективно, я бы лично все-таки предпочел переписать его - вы можете внести улучшения, и когда вы закончите, вы поймете это лучше.
Я повторно использовал Java-код от JRuby, я не понимаю, почему это не может пойти в обе стороны.
Еще одна мысль, можете ли вы запустить код Ruby, а затем просто подключить веб-сервис или набор веб-сервисов для вызова из приложения Java? Синатра делает смехотворно простым написание оболочки для веб-сервиса для кода ruby. И у Java нет недостатка в инструментах для вызова веб-сервисов.
Один из вариантов, который вы могли бы рассмотреть, - это разделить ваше приложение на две части, которые взаимодействуют, используя что-то вроде pipe /files (или просто stdin и stdout) или какой-то механизм RPC. То, имеет ли смысл подобный подход, действительно зависит от того, что делает библиотека Ruby - создание интерфейса между двумя приложениями может быть более сложным, чем реальное воплощение вещей в Java.