【发布时间】:2011-01-17 04:05:44
【问题描述】:
我需要将我的 JRuby 应用程序编译成一个独立的 JAR 文件。我该怎么做?
【问题讨论】:
-
这个问题可能会有所帮助:stackoverflow.com/questions/1921475/…
-
该问题仅与编译和执行 (J)Ruby 脚本有关,与 Jar 打包(部署)无关。
标签: jruby executable-jar
我需要将我的 JRuby 应用程序编译成一个独立的 JAR 文件。我该怎么做?
【问题讨论】:
标签: jruby executable-jar
只运行一个脚本:
JRuby 站点有一个可运行的 JAR 文件,您可以从 JRuby download page 获得。您想要 JRuby 完整的 JAR 文件。然后,您可以通过
运行您的应用程序java -jar jruby-complete-1.4.0.jar <script>
我相信您也可以从源代码构建相同的 JAR 文件。在下载的源代码中做
ant --projecthelp
要将 Ruby 脚本完全嵌入到 JAR 文件中:Embedding JRuby in Java 是一个很好的起点。您可能想要解压 jruby-complete.jar 文件,添加您的 Java 主类,该类具有对 JRuby 脚本的标注或嵌入了 Ruby 代码,替换清单的主类以指向您的新入口点,然后把它备份起来。
【讨论】:
JRuby 1.6 对此进行了改进。现在有一个 wiki 部分 - StandaloneJarsAndClasses - 讨论如何使用 jrubyc 生成 .class 文件和独立 jar。
使用新的编译器,您可以从 wiki 构建 .class 文件,如下例所示:
james@gealach:/tmp/fnx$ cat my_foo.rb Foo 类 定义栏(a,b) 把 a + b 结尾 结尾 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 詹姆斯@gealach:/tmp/fnx$ ls Foo.class Foo.java my_foo.rb james@gealach:/tmp/fnx$ javap.exe Foo 编译自“Foo.java” 公共类 Foo 扩展 org.jruby.RubyObject{ 公共静态 org.jruby.runtime.builtin.IRubyObject __allocate__(org.jruby.Ruby, org.jruby.RubyClass); 公共 Foo(); public java.lang.Object bar(java.lang.Object, java.lang.Object); 静止的 {}; }您可以将 jar 的入口点设置为 org.jruby.JarBootstrapMain 并添加一个 jar-bootstrap.rb 文件。
【讨论】:
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 文件中的任何其他gem .
【讨论】: