Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用jRuby编译AOT以混淆Rails代码_Java_Ruby On Rails_Ruby_Jruby_.class File - Fatal编程技术网

Java 使用jRuby编译AOT以混淆Rails代码

Java 使用jRuby编译AOT以混淆Rails代码,java,ruby-on-rails,ruby,jruby,.class-file,Java,Ruby On Rails,Ruby,Jruby,.class File,我们有一个运行在windows server 2012 R2中的RoR应用程序,在客户端网络中使用IIS、jruby和puma。生产应用程序运行良好!现在唯一的问题是,我们需要通过模糊处理以某种方式保护源代码。我最初的想法是,我们可以将.rb文件编译成.class文件,以便jruby可以消化这些文件而不是.rb文件。所以我试着用一个文件,看看是否能让它工作。我导航到myapp/app/Controller并 jruby -S jrubyc application_controller.rb 在

我们有一个运行在windows server 2012 R2中的RoR应用程序,在客户端网络中使用IIS、jruby和puma。生产应用程序运行良好!现在唯一的问题是,我们需要通过模糊处理以某种方式保护源代码。我最初的想法是,我们可以将.rb文件编译成.class文件,以便jruby可以消化这些文件而不是.rb文件。所以我试着用一个文件,看看是否能让它工作。我导航到myapp/app/Controller并

jruby -S jrubyc application_controller.rb
在该目录中创建了一个已编译的类文件application_controller.class。然后,我尝试了这个链接中提到的方法,以获得一个较旧版本的jRuby,看看它们是否可以工作-

但他们都没有,要么给我一个未初始化的常量ApplicationController,要么无法加载文件ApplicationController

我也尝试过这方面的说明,但鉴于我缺乏java知识,我很确定我没有正确的说明。这是应用程序的最后状态。\u controller.rb-

require 'java'
$CLASSPATH << 'lib'
java_import 'application_controller'
然后,我将.war提取到tomcat容器中,以查看.rb文件的内容。它们看起来都是这样的:

load __FILE__.sub(/.rb$/,'.class')
所以我试着把这个片段放到运行在puma上的应用程序_controller.rb中。我访问了jruby-SRails服务器,发现以下错误-

use 'java_import' to load normal Java classes: application_controller
因此,我随后将我的应用程序_controller.rb更改为

require 'java'
$CLASSPATH << 'app/controllers'
java_import 'application_controller'
可能是因为这件事需要改变吗?此外,我正在使用JRuby9.0.0.0,我想我可能会尝试回滚到1.7,看看会发生什么

更新:成功了! 回滚到jruby 1.7,在应用程序_controller.rb上运行jrubyc,并将应用程序_controller.rb的内容替换为

load __FILE__.sub(/.rb$/,'.class')
使用puma和IIS,我的应用程序加载得很好。

尝试使用编译的功能。。。它也会这样做,但会创建一个加载.class版本的伪.rb文件(从您的笔记或旧AOT wiki中不清楚您是否明确尝试了该操作)


您应该查看生成的.war文件(它是一个.zip文件)中编译的.rb文件是如何更新的…

因此我尝试了,我更新了我的问题以反映发生了什么,并将其返回到1.7,再次尝试使用warbler方法,结果成功了!
cannot import class 'application_controller' as 'application_controller'
load __FILE__.sub(/.rb$/,'.class')