我正在構建一個使用Ruby中已經開發的某些功能的Spark應用程序。如何在.jar中打包java main + jruby編譯的類+ ruby腳本?
我做了選擇,通過在Ruby中定義MyProxy
類並使用JRuby編譯來調用Scala main中的Ruby部分。 然後,我可以使用MyProxy
來調用保留在腳本中的其餘Ruby代碼。最重要的原因是,我無法使用JRuby編譯它們,可能是因爲他們太動態:
## myProxy.rb -> compiled into myProxy.class
## jrubyc --javac myProxy.rb
require 'java'
java_package 'ruby.proxy'
require_relative 'some.rb'
class MyProxy
def self.invoke_script()
... ## invoke some other ruby in script that are note compiled by jrubyc
end
end
和Scala主營:
object myRun extends App {
val something = MyProxy.invoke_script()
...
}
在運行時流looke這樣的:
Main.class(scala) - >調用myProxy.class(編譯myProxy.rb的ruby) - >調用script.rb函數
它的工作原理,我能夠爲Scala和co製作一個可運行的jar mpiled紅寶石部分。但是當我運行它時:java -jar myApp.jar
, 它仍然需要訪問我的myProxy.rb文件,當然還有其他所有scrips.rb文件。 因此,我需要在執行此命令時在工作目錄中的所有ruby腳本的副本。
理想情況下,我想在myApp.jar中包含所有ruby腳本,並且能夠輕鬆部署在Spark集羣上進行部署。 這是可能的,以及如何?我看過warbler和rawr。但是,我沒有看到這些工具如何幫助我在這個混合環境中(主要在Java中,某些部分編譯了ruby,某些部分是純腳本)。
任何幫助表示讚賞!