2010-02-24 88 views
1

我寧願不「重新發明輪子」,我發現了一個Ruby項目,它提供了我在Java應用程序中需要的功能(沒有預先存在的Java項目可以滿足我的需求 - 相信我,我看過了) 。所以,最好的情況是,我能夠從我的Java代碼(ala JSR223)運行Ruby代碼。我應該嘗試在Java項目中重用Ruby代碼嗎?

但是,這個Ruby項目依賴於安裝了幾個gem。我對將整個Java應用程序轉換爲JRuby應用程序並不感興趣,但我希望能夠利用此項目。有沒有簡單的方法來從寶石代碼加載到ScriptEngine,或者我只是要求頭痛?

+2

是的,繼續,並告訴我們它是如何去的:P – OscarRyz 2010-02-24 23:01:15

回答

2

JRuby是一個堅實的平臺,與Java很好地集成在一起。但Rubygems不能很好地與Java構建工具集成。

如果任何寶石包含本地C代碼,那麼忘記它,您不能在JRuby中使用它們。

如果所有的寶石(和他們所有的依賴)是純Ruby,它在技術上是可以從JRuby中使用它們,但你有頭痛得到它們封裝在JAR文件,這樣JRuby運行時能夠找到它們。

2

大多數情況下,我會說因爲複雜。儘管這是主觀的,但我寧願花時間重新編寫它 - 你可以改進,當你完成後,你會更好地理解它。

+0

我同意,如果可能的話,將其移植到java將是美好的。但是,由於時間限制,我可能會使用的替代方法是將其作爲Web服務運行。 – 2010-02-24 22:56:07

1

您可能會考慮的一個選項是將應用程序拆分爲兩部分,它們使用諸如管道/文件(或者簡單的stdin和stdout)或某種RPC機制進行交互。這樣的方法是否真的有意義取決於Ruby庫的功能 - 在兩個應用程序之間創建接口可能比實際重新實現Java中的東西更復雜。

1

我已經從JRuby中重用了Java代碼,我不明白爲什麼不能這樣做。

另一個想法是,您可以運行Ruby代碼,然後在Web服務或一組Web服務上調用Java應用程序? Sinatra使得爲Ruby代碼編寫Web服務包裝器變得很簡單。 Java並不缺乏調用Web服務的工具。

相關問題