标签: jruby

通过Class.forName从Java加载JRuby类

我在Java代码中有以下类:

public class CHRTreeCreator extends IndexCreator { ... }
Run Code Online (Sandbox Code Playgroud)

相反,CHRTreeCreator我想使用也扩展的不同实现IndexCreator,但我想在JRuby中编写代码.问题是,IndexCreator基于xml配置文件选择了具体实现:

<creator>dwe.index.tree.chr.CHRTreeCreator</creator>
Run Code Online (Sandbox Code Playgroud)

代码如下所示:

// className is fetched from XML
Class creatorClass = Class.forName(className);
Constructor constructor = creatorClass.getConstructor(new Class[] {  });
creator = (IndexCreator) constructor.newInstance(new Object[] { });
Run Code Online (Sandbox Code Playgroud)

问题是,是否可以在Ruby中实现它,如下所示:

class MyIndexCreator < IndexCreator
end
Run Code Online (Sandbox Code Playgroud)

并以某种方式将MyIndexCreator类名放入XML配置文件中.在这种情况下,模块 - 包映射如何工作?

如果不能通过Java的Class.forName加载Ruby类,我该如何解决这个问题?

java jruby classloader

2
推荐指数
1
解决办法
989
查看次数

可以在没有安装nokogiri-java的情况下加载joky中的nokogiri?

我需要一种方法来运行以下nokogiri脚本

#parser.rb
require 'nokogiri'

def parseit()
//...
end
Run Code Online (Sandbox Code Playgroud)

parseit()在jruby中调用while.rb下运行的while

#main.rb
require 'parser'

parseit()
Run Code Online (Sandbox Code Playgroud)

当然问题是jruby找不到,'nokogiri'因为我没有安装它又名nokogiri-java viajruby -S gem install nokogiri

原因是我在Jruby下运行的nokogiri中发现了一些错误,所以我只在Ruby上安装了nokogiri而不是Jruby.在parser.rb完全下只是红宝石运行.

所以我的目标是能够运行parseit()而无需在Jruby上安装nokogiri!

ruby jruby nokogiri

2
推荐指数
1
解决办法
2921
查看次数

用黄瓜和jruby

我正在我公司的内部网上工作

  • 黄瓜0.8.5
  • 小黄瓜2.1.5

而我正试图从使用ruby 1.8.7切换到jruby 1.5.1

但是,每当我尝试从jruby运行黄瓜时,我都会收到错误:

% jruby -S cucumber
/usr/local/src/jruby-1.5.1/lib/ruby/site_rub/1.8/rubygems/custom_require.rb:31:in `require': no such file to load -- gherkin (LoadError)
Run Code Online (Sandbox Code Playgroud)

我认为这是b/c gherkin 2.1.5是原生扩展,jruby无法处理它:

% jgem install gherkin-2.1.5.gem
...
ERROR: Error installing gherkin-2.1.5.gem:
       ERROR: Failed to build gem native extension.
Run Code Online (Sandbox Code Playgroud)

现在,我想尝试更新版本,但由于这是在受保护的Intranet上,导入新软件是PITA,需要一些时间.

有没有人有任何关于如何制作我工作的软件的建议?我错过了正确的配置设置或其他一些设置吗?

jruby cucumber gherkin

2
推荐指数
1
解决办法
4142
查看次数

是否可以在Google App Engine上使用Ruby/jRuby/Java?

我知道可以在Google App Engine上运行jRuby/Java,但我是否也想使用Ruby on Rails作为该设置的前端,我能够吗?

谢谢,亚历克斯

ruby google-app-engine ruby-on-rails jruby

2
推荐指数
1
解决办法
325
查看次数

对非rails应用程序使用activerecord迁移,有哪些步骤?

我有一个java应用程序,我想为此使用rails迁移.

让这个工作的步骤是什么?

到目前为止我做到了这一点:

1. installed jruby
2. installed the following gems: rspec, cucumber, rake
Run Code Online (Sandbox Code Playgroud)

我是安装rails还是只安装activerecord?

有关存储Rakefile的文件夹结构的任何建议吗?我假设rake只能在rakefile所在的路径上工作?

我如何告诉它我的数据库连接信息?

java activerecord ruby-on-rails jruby

2
推荐指数
1
解决办法
864
查看次数

带有Rubeus和Swing的JRuby脚本一旦使用warble打包到jar中就会退出

我试图将一个简单的JRuby脚本打包到一个jar文件中.该脚本使用Rubeus :: Swing,并在使用JRuby解释器执行时正确运行.

require 'rubygems'
require 'rubeus'

class Example01
  extend Rubeus::Swing
  def show
    JFrame.new("Rubeus Swing Example 01") do |frame|
      frame.visible = true
    end
  end
end
Example01.new.show
Run Code Online (Sandbox Code Playgroud)

一旦我将脚本打包到JAR中warble,当我执行时:

java -jar jtest.jar
Run Code Online (Sandbox Code Playgroud)

... JFrame窗口显示并立即关闭.

没有任何错误的迹象.

有谁知道为什么会这样?

java concurrency swing jruby jframe

2
推荐指数
1
解决办法
407
查看次数

Ruby会打开文件但不写入它?

我正在尝试创建一个基本的ruby scraper,它将从html源代码中获取8个字母或更长的单词.然后将它们保存在与单词的第一个字符对应的文件中.好像很简单吧?

    re = /\w{8,}/
    cre = /[a-z0-9]/
    a = b.html    #This grabs the html from the browser
    matchx = a.scan(re)
    matchx.each do |xx|
        word = xx.to_s.downcase.chomp
        fchar = word[0].chr

        if (fchar.match(cre)) #Not sure if I need this
            @pcount += 1
            fname = @WordsFName+fchar   #@WordsFName is a prefix
            tmpF = File.open(fname,"a+")

            #Check for duplicates, if not write to file
            exists = File.readlines(fname).any? { |li| li[word] }
            if (!exists)                    
                tmpF.write(word+"\n")
                print word 
                @wcount += 1
            end
        end

    end
Run Code Online (Sandbox Code Playgroud)

Ruby成功抓取所有单词,获取第一个字符,并打开所有必需的文件,但无法写入.此外,打印方法打印所有单词,包括重复,但检查任何?irb上的方法没有问题..

ruby buffer file jruby

2
推荐指数
1
解决办法
7753
查看次数

Jruby-Convert RubyString转换为Java Char

下面是我用来从RubyString转换为Java Char的代码..请你建议我更好的方式Jruby(自动处理这些类型错误或jruby中的一些代码转换)

ruby_string="Raj"

java.lang.String.new(col_value)
col_value=str_obj.charAt(0)
Run Code Online (Sandbox Code Playgroud)

jruby

2
推荐指数
1
解决办法
526
查看次数

如何检查哪个 JRuby 版本与哪个 Java 版本兼容?

在 JRuby 发行说明中,我经常发现特定版本的 JRuby 与哪个版本的 Ruby 兼容。它与哪个版本的 Java 运行时兼容?

例如,http://jruby.org/2016/05/27/jruby-9-1-2-0页面提到它与 Ruby 2.x 兼容,但没有提及 Java 运行时版本。

jruby version

2
推荐指数
1
解决办法
2313
查看次数

Ruby `exit!` 函数似乎调用了与文档相反的退出处理程序

以下代码在 Windows 上的 JRuby 9.1.17.0 和 9.2.13.0 上运行:

at_exit { puts "at_exit function" }
ObjectSpace.define_finalizer("string",  proc { puts "in finalizer" })
exit!
Run Code Online (Sandbox Code Playgroud)

产生这个:

at_exit function
in finalizer
Run Code Online (Sandbox Code Playgroud)

我的期望是不应该根据以下文档调用退出处理程序exit!https : //ruby-doc.org/core-2.7.1/Kernel.html#method-i-exit-21

这是一个错误exit!吗?

有没有其他方法可以实现不触发退出处理程序的预期结果,以便我可以保证从内部杀死我的系统?

ruby jruby

2
推荐指数
1
解决办法
67
查看次数