Jruby on rails 是如何加载jar包的

Posted ruby程序员

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jruby on rails 是如何加载jar包的相关的知识,希望对你有一定的参考价值。


点击「箭头所指处」可快速关注
微信号:ruby程序员




Jruby和Rails的安装同Ruby on rails的步骤基本一样,这里是遇到的两个问题。

Rails 4.2.0 报错,没有对应的AR-JDBC版本,换成Rails4.0.2版本就好了

Jruby -S rails s 启动的时候报错:

OpenSSL::Cipher::CipherError: Illegal key size: possibly you need to install Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files for your JRE

要求安装JCE,到Oracle 官网上 下载一个UnlimitedJCEPolicyJDK7.zip文件,解压缩后包含两个jar文件:local_policy.jar和 US_export_policy.jar。将这两个文件替换$JAVA_HOME/jre/lib/security目录下两个同名文件,此时,再jruby -S rails s启动app则可以正确运行了。

配置$CLASSPATH

Jruby on rails 默认存在$CLASSPATH, 在控制台可以查看该路径,是Jruby默认自动加载的几个路径

,就像Rails中的load_path一样,我们需要自定义这个加载路径,使我们的Jruby on rails程序可以调用

java的jar包。

--jar包通过maven来生成:详细请查看:http://liuzhijun.iteye.com/blog/1472008--

修改application.rb

Ruby代码


require 'java'

$CLASSPATH << File.join(Rails.root, 'lib','java')

Dir.glob(File.join(Rails.root, 'lib','java',"**","*.jar")).each do |jar|

$CLASSPATH << jar

end


这样,rails根目录下lib/java/**/*.jar就会被加载进来,通过查看$CLASSPATH就可以看到加载路径是否添加成功。

测试:

通过maven构建java项目,新建java文件 Ackermann.java,编译并打包生成jar包,将jar包拷贝到rails根目录/lib/java/下即可。

Java代码


public class Ackermann {
public static int ack(int m, int n) {
if (m == 0)
return n + 1;
if (n == 0)
return ack(m - 1, 1);
return ack(m - 1, ack(m, n - 1));
}
}


在控制器中就可以直接调用了

@result = Java::Ackermann.ack(2,3)


done!


关注我们
微信号:ruby程序员 (←长按复制)

[Ruby程序员]旨在分享最新的Ruby & Rails,移动开发以及其他相关技术的分享,内容通俗易懂,有来自北京,上海,广州的技术达人不定期的分享。




以上是关于Jruby on rails 是如何加载jar包的的主要内容,如果未能解决你的问题,请参考以下文章

JRuby on Rails 日志轮换失败

Ruby on Rails 和 Netezza 后端

Jruby - 创建 jar,没有要加载的文件

如何将 HSQLDB 与 Ruby on Rails 一起使用。

更新到 jruby-1.7.4 时出现加载问题

OpenSSL::Cipher::CipherError 在 JRuby 上使用 Rails4