2

我在构建 jar 文件时遇到了问题。我在 OS X Lion 上使用 JRuby 1.6.5.1。

安装:

jruby --1.9 -S rawr install

在 src 目录中,我创建了一个简单的 hello_jruby.rb ,其中包含:

puts "Hello JRuby!"

build_configuration.rb 文件具有以下设置:

c.project_name = "hello_jruby"
c.executable_type = "console"
c.main_ruby_file = "hello_jruby"

生成jar文件:

$ jruby --1.9 -S rake rawr:jar
mkdir -p package/classes/java
javac -target 1.6 -cp lib/java/jruby-complete.jar:src -sourcepath src -d package/classes/java src/org/monkeybars/rawr/Main.java
mkdir -p package/classes/ruby
Copying source file src/hello_jruby.rb to package/classes/ruby/hello_jruby.rb
cp src/hello_jruby.rb package/classes/ruby/hello_jruby.rb
mkdir -p package/classes/META-INF
mkdir -p package/jar
=== Creating jar file: package/jar/hello_jruby.jar
cp lib/java/jruby-complete.jar package/jar/lib/java/jruby-complete.jar

jar 文件的执行都不会打印输出:

$ java -jar ./hello_jruby.jar 

$ java -cp .:./lib/java/jruby-complete.jar -jar ./hello_jruby.jar 

我对为什么这不起作用感到完全困惑。我在 Windows 上尝试过,但是 rawr 使用的 CLASSPATH 分隔符是冒号(:) 而不是分号(;) 所以 rawr:jar 不起作用。

我一定是遗漏了一些东西,或者不完全理解如何使用 rawr。

欢迎任何想法。谢谢你的时间!

编辑:其他尝试和结果

安装了最新的 JRuby(不使用 RVM):

$ jruby --1.9 -v
jruby 1.6.7.2 (ruby-1.9.2-p312) (2012-05-01 26e08ba) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_33) [darwin-x86_64-java]

爪哇版:

$ java -version
java version "1.6.0_33"
Java(TM) SE Runtime Environment (build 1.6.0_33-b03-424-11M3720)
Java HotSpot(TM) 64-Bit Server VM (build 20.8-b03-424, mixed mode)

安装了最新的rawr:

$ jruby --1.9 -S gem install rawr --source http://gems.neurogami.com
Fetching: rawr-1.6.3.gem (100%)
Successfully installed rawr-1.6.3
1 gem installed

我注意到的一件事是 rawr 可执行文件位于 Ruby 1.9.2 目录中。这是正常的和预期的吗?

$ which rawr
/Users/david/.rvm/gems/ruby-1.9.2-p290/bin/rawr

以下命令现在失败。我以前使用 RVM 安装过 JRuby。在安装最新的 JRuby 之前,我卸载了 RVM JRuby。

$ jruby --1.9 -S rake -T
(in /Users/david/Dropbox/SourceCode/Ruby/RubySandbox/rawr_test)
rake aborted!
no such file to load -- ftools

(See full trace by running task with --trace)

但是,通过 ruby​​ 1.9.2 运行 rake 可以:

$ rake -T

使用以下代码生成 jar:

$ rake rawr:jar

生成 jar 时仍然没有输出或错误。

$ java -jar ./hello_jruby.jar 
$

使用 JRuby 运行脚本成功:

$ jruby --1.9 ./hello_jruby.rb 
Hello JRuby!

生成的jar有以下文件:

$ ls -R
META-INF        java            ruby
hello_jruby.rb      org         run_configuration

./META-INF:
MANIFEST.MF

./java:

./org:
monkeybars

./org/monkeybars:
rawr

./org/monkeybars/rawr:
Main.class

./ruby:

TEST01:使用系统 JRuby 并避免使用 RVM Ruby 1.9.2。

$ rvm use ruby-1.9.2

$ gem uninstall rawr

$ rvm system

$ jruby --1.9 -S gem install rawr --source http://gems.neurogami.com

$ which rawr
/Library/Frameworks/JRuby.framework/Versions/Current/bin/rawr

$ jruby --1.9 -S rawr install

$ jruby --1.9 -S rake rawr:jar

rawr 可执行文件现在位于不同的位置。但是,仍然没有从 jar 中得到任何输出。我什至尝试了所有没有 --1.9 的 jruby 命令,没有任何区别。我也将在 Windows 上再试一次。

下一个测试是提取最新的 rawr 源并运行上述说明。

再次感谢!

4

1 回答 1

3

首先:不,gem 可能不应该出现在您的 1.9.2 安装下。RVM 一定认为您仍在使用 1.9.2。由于您的 JRuby 在 rvm 之外,请键入rvm system忽略所有 rvm 安装的 Ruby。您可能想先从 1.9.2 卸载 rawr。

(顺便说一句:我刚刚在我的 1.9.3 Ruby 下安装了 rawr,它仍然可以正常工作。很奇怪。)

跟进我的评论:我已经进行了一些挖掘,看起来在 neurogami.com 上托管的 gem 仍然落后于 git HEAD。我在使用 ftools 时遇到了同样的错误。我为使其正常工作(在 Ubuntu 和 Windows 上)所做的工作是:

  1. gem install bones
  2. gem install rspec -v 1.3.0
  3. git clone https://github.com/rawr/rawr.git
  4. cd rawr
  5. rake gem:package
  6. gem install pkg/rawr-1.6.3.gem
  7. cd ..
  8. mkdir rawr-test-TEMP
  9. cd rawr-test-TEMP
  10. rawr install
  11. 创建 hello_jruby.rb 并向 build_configuration.rb 添加适当的配置选项(我还必须添加c.target_jvm_version = 1.7,因为 rawr 没有选择我的 Java 7 安装)
  12. edit line 667 of lib/zip/zip.rb inside your rawr gem's directory -- add a closing parenthesis to the end. This is a bug in upstream rawr.
  13. rake rawr:jar
于 2012-06-27T19:53:42.463 回答