如何在.jar java main+;jruby编译类+;ruby脚本?

如何在.jar java main+;jruby编译类+;ruby脚本?,java,ruby,scala,jar,jruby,Java,Ruby,Scala,Jar,Jruby,我正在构建一个Spark应用程序,它利用Ruby中已经开发的一些特性 通过在Ruby中定义MyProxy类并使用JRuby编译,我选择从Scala main调用Ruby部分。 然后,我可以使用MyProxy调用留在脚本中的其余Ruby代码。最重要的原因是我无法用JRuby编译它们,可能是因为它们太过动态: ## myProxy.rb -> compiled into myProxy.class ## jrubyc --javac myProxy.rb require 'java' java

我正在构建一个Spark应用程序,它利用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 Main:

object myRun extends App {
  val something = MyProxy.invoke_script()
  ...
}
在运行时,流如下所示:

Main.class(scala)->调用myProxy.class(myProxy.rb的编译ruby)->调用script.rb中的函数

它是有效的,我能够为Scala和已编译的ruby部分制作一个可运行的jar。但是当我运行它时:
java-jarmyapp.jar
, 它仍然需要访问我的myProxy.rb文件,当然还有所有其他scrips.rb文件。 因此,在执行此命令时,我需要工作目录中所有ruby脚本的副本

理想情况下,我也希望在myApp.jar中包含所有ruby脚本,并且能够轻松地部署到spark集群上。 这有可能吗?怎么可能

我已经看过了。然而,我不知道这些工具如何在这种混合环境中帮助我(主要是Java,部分是编译过的ruby,部分是纯脚本)

感谢您的帮助

如中所述,将ruby脚本打包到jar中应该很简单,因为将它们包含在.jar中(原文如此):

Java类路径中的所有内容都被视为加载路径条目,因此,例如,包含在JAR文件中的.rb脚本是可加载的

它在我的情况下不起作用,因为我在脚本中使用了require_relative。将require_relative替换为require,使其能够与嵌入myApp.jar中的脚本一起工作

此外,在titi.rb中使用
require\u relative“toto”
会触发titi.rb script not found的错误,这是一个误导,因为正在执行的是titi.rb。

如中所述,将ruby脚本打包在一个jar中,应该简单到将它们包含在.jar中(原文如此):

Java类路径中的所有内容都被视为加载路径条目,因此,例如,包含在JAR文件中的.rb脚本是可加载的

它在我的情况下不起作用,因为我在脚本中使用了require_relative。将require_relative替换为require,使其能够与嵌入myApp.jar中的脚本一起工作

此外,在titi.rb中使用
require\u relative“toto”
会触发titi.rb脚本未找到的错误,这是误导性的,因为正在执行的是titi.rb