创建可部署的JRuby JAR文件?

23

我需要将我的JRuby应用程序编译为一个独立的JAR文件。如何实现?


这个问题可能会有所帮助:https://dev59.com/00rSa4cB1Zd3GeqPZ-Co - atomicules
那个问题仅涉及编译和执行(J)Ruby脚本,而不涉及Jar打包(部署)。 - Redoman
4个回答

24

Warbler 1.3.0 或更新版本也可以用于制作可执行的JAR文件。

快速指南。请确保您在此处使用JRUBY的gem等:

$ gem install warbler
$ mkdir bin
$ cat <<EOF > bin/myapp
#!/usr/bin/env jruby

puts "Hello World"

EOF
$ chmod a+x bin/myapp
$ warble jar

现在您应该在当前目录中拥有一个名为 myapp.jar 的文件。根据 README ,您只需要在 lib 目录中添加所需的任何库,并使用 .gemspec Gemfile 来控制需要放入 .jar 文件中的其他gems。


6

请查看rawr。它是一个将您的应用程序打包成JAR文件的宝石。

如果您想编译源代码以进行保护,则必须为项目中的每个脚本生成.class文件(如此处所述),然后替换原始脚本的内容。

require 'the_corresponding_class_file'

对于每个已编译的脚本,请执行以下操作。

2
JRuby 1.6对此进行了改进。现在Wiki中有一个 StandaloneJarsAndClasses部分,介绍如何使用jrubyc生成.class文件和独立的jar包。
有了新的编译器,您可以像Wiki上的例子那样构建.class文件:
james@gealach:/tmp/fnx$ cat my_foo.rb 
class Foo
   def bar(a, b)
     puts a + b
   end
end
james@gealach:/tmp/fnx$ ~/jruby/bin/jrubyc --javac my_foo.rb 
将Java类Foo生成到C:/cygwin/tmp/fnx/Foo.java
javac  -d C:/cygwin/tmp/fnx -cp C:/cygwin/home/james/jruby/lib/jruby.jar;. C:/cygwin/tmp/fnx/Foo.java
james@gealach:/tmp/fnx$ ls
Foo.class  Foo.java  my_foo.rb
james@gealach:/tmp/fnx$ javap.exe Foo
Compiled from "Foo.java"
public class Foo extends org.jruby.RubyObject{
    public static org.jruby.runtime.builtin.IRubyObject __allocate__(org.jruby.Ruby, org.jruby.RubyClass);
    public Foo();
    public java.lang.Object bar(java.lang.Object, java.lang.Object);
    static {};
}

你可以将jar的入口点设置为org.jruby.JarBootstrapMain,然后添加一个jar-bootstrap.rb文件。


1

运行脚本的方法:

JRuby网站提供了一个可运行的JAR文件,您可以在JRuby下载页面上获取。您需要完整的JRuby JAR文件。然后,您可以通过以下方式运行应用程序

java -jar jruby-complete-1.4.0.jar <script>

我相信你也可以从源代码构建相同的JAR文件。在下载的源代码中执行以下操作:

ant --projecthelp

将 Ruby 脚本完全嵌入 JAR 文件中:在 Java 中嵌入 JRuby 是一个很好的起点。您可能需要解压 jruby-complete.jar 文件,添加您的 Java 主类,该主类要么调用 JRuby 脚本,要么将 Ruby 代码嵌入其中,将清单文件的主类替换为指向您的新入口点,并重新打包。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接