【问题标题】:JRuby project structure and jar creationJRuby项目结构和jar创建
【发布时间】:2015-08-04 02:20:29
【问题描述】:

我必须为我的项目创建一个 JRuby jar 文件。下面我提供了有关我的目录结构和文件的详细信息。

  1. 顶级目录 - Project1
  2. Project1 下 – 我有bin, lib, src 文件夹
  3. Project1/bin 下——我有wrapper shell script,我从那里打电话给jruby jar
  4. Project1/lib 下——我有jruby-complete-1.6.7.2.jarojdbc6.jar
  5. Project1/src 下——我有libtool 文件夹
    • Project1/src/lib 下——我有main.rb 文件和util文件夹
    • Project1/src/lib/util 下 - 我有2-ruby scripts 正在被main.rb 调用。
  6. Project1/src/tool 下-我有Tool.java,我从那里调用main.rb

现在我有几个问题 -

  1. 是否需要捆绑我在 ruby​​ 脚本中使用的所有 gem(例如:colorizesocketnet/ssh 等)?

  2. 如何创建 JRuby jar?在发布我的问题之前,我在stackoverflow上看到了以下posts,但我很困惑,有点不知道从哪里开始。请为此提供一些指导。

【问题讨论】:

  • @joelparkerhenderson-感谢您的回答。这很有帮助,但我不需要在我的项目中使用莺。相反,我发现按照blog.nicksieger.com/articles/2009/01/10/… 将所有 gem 打包成一个可重用的 jar 文件更容易。但是现在我在尝试从 shell 脚本调用 jar 时面临Exception in thread "main" java.lang.NoClassDefFoundError 错误。你能帮我解决这个问题吗?
  • 通常我会在找到解决方案后回答我的问题,以便对像我这样的其他人有所帮助,但在此之前我试图获得工作成果。现在我通过了下一步并尝试修复其他错误。如果我在一段时间内找不到解决方案,我会发布我的问题。再次感谢您的帮助。

标签: ruby jruby


【解决方案1】:

以下是将所有 gem 捆绑到 jruby-complete.jar 中的步骤。

  1. http://jruby.org/download下载jruby-complete-latest_version.jar。

  2. 验证下载的 jar 中包含哪些 gem,例如 java -jar jruby-complete-latest_version.jar -S gem list

  3. 要将 gem 推送到 jruby-complete-latest_version.jar 中,您需要检查该 gem 的所有必需的运行时依赖项。示例:net-scp需要先下载net-ssh gem。

  4. 使用以下命令将 gem 下载到您拥有 jruby-complete-latest_version.jar 的同一目录下:

    java -jar jruby-complete-latest_version.jar -S gem install -i ./net-ssh net-ssh --no-rdoc --no-ri java -jar jruby-completelatest_version.jar -S gem install -i ./net-scp net-scp --no-rdoc --no-ri

  5. 现在使用 jar 文件的 update file (uf) 选项在 ruby-complete-latest_version.jar 中添加 gem。例子: jar uf jruby-complete-latest_version.jar -C net-ssh . jar uf jruby-complete-latest_version.jar -C net-scp .

  6. 检查 jar 文件的 gem 列表以确保所有 gem 都已成功添加 java -jar jruby-complete-latest_version.jar -S gem list

  7. 最后一次检查以确保 gem 加载成功,在 irb 上运行 require 语句。

    java -jar jruby-complete-latest_version.jar -S irb irb(main):001:0> require 'rubygems' => true irb(main):002:0> require 'net/scp' => true

lib 下获得jruby-complete_latest_version.jar 文件后,我使用ANT 为我的项目构建了jar。

同样,此解决方案适用于较小的项目。对于大型项目,Warbler 将是 @joelparkerhenderson 建议的最佳选择。

【讨论】:

    猜你喜欢
    • 2016-11-04
    • 2017-10-13
    • 1970-01-01
    • 2013-10-14
    • 2014-08-28
    • 1970-01-01
    • 2014-05-09
    • 2011-01-17
    • 2020-03-13
    相关资源
    最近更新 更多