精华帖 (16) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|||||||
---|---|---|---|---|---|---|---|
作者 | 正文 | ||||||
发表时间:2008-06-02
以前做了个Ruby的项目,最近有了点新的需求,其中有一条是要保护源代码,我选择用JRuby把rb文件编译为class,查了些资料,看了下jrubyc相关的一些代码,也许有朋友有类似的需要,和大家分享一下。突发奇想用英文来写,很久不写英文了,果然这个还得常写写。。。附上对应的中文,如果不高兴看英文的同学可以直接看中文的,呵呵。
There are many reasons for us to turn Ruby files (.rb) into Java classes (.class). For example, you want a high-performance system, or you want to protect your ruby code, etc. Last year, JRuby finished its compiler which can help you to do the compilation. Now you’ve got another choice besides XRuby. You can find some material on JRuby’s Wiki, but it’s far from enough, and the most pages you find on the Internet just compile some hello world programs. I tried to compile my ruby project (of course, it's more complex than printing "Hello World", it's a network traffic control script under FreeBSD) last week. If you have the same requirement, maybe my experience can give you a little help :-) jruby %JRUBY_HOME%\bin\jrubyc <rb>
Suppose your program is very simple, please forgive me using "Hello World" again. (src\hello.rb) p "Hello World" The command to compile it looks like this: jruby %JRUBY_HOME%\bin\jrubyc src\hello.rb
Then, try this one to run it: java -cp .;%JRUBY_HOME%\lib\jruby.jar ruby.src.hello
Have you feel something strange? Why the class is ruby.src.hello? After checking the command line parameters, you will find the answer. Here is the command pattern: jrubyc [options] (FILE|DIRECTORY)
jrubyc has three parameters:
Now, try to compile the hello.rb again: jruby %JRUBY_HOME%\bin\jrubyc -d src -p "" src\hello.rb
java -cp .;%JRUBY_HOME%\lib\jruby.jar hello Next, find yourself some other Ruby files which have require or include or something else. Put them into a directory. Let's call it dir. Try the following command: md classes
jruby %JRUBY_HOME%\bin\jrubyc -t classes -d dir -p "" dir If everything goes right, you can check the classes directory. All the files are there. Since you require something outside the source files, don’t forget to tell java where to find them. For example, your dir\complex_ruby_script required yaml. java -cp .\classes;%JRUBY_HOME%\lib\jruby.jar;%JRUBY_HOME%\lib\ruby\1.8 complex_ruby_script
You should see the result of your Ruby program. Maybe I should say your Java program.
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|||||||
返回顶楼 | |||||||
发表时间:2008-06-02
有很多原因促使我们将Ruby文件(.rb)编译成Java的类,可以是追求更高的性能,也可是出于要保护源代码的目的等等。去年,JRuby完成了它的编译器,现在你有了XRuby以外的另一个选择。在JRuby的Wiki上有些材料,不过那还远远不够,而在Internet上找到的大多数东西又只是简单地编译hello world程序。上周我试着编译了一下我的一个ruby项目(当然,它做的事情比打印“Hello World”复杂多了,那是一个FreeBSD下的流量控制脚本)。如果你也有类似的需求,希望我的经验能对你有所帮助:-) jruby %JRUBY_HOME%\bin\jrubyc <rb>
假设你的程序很简单,请原谅我在这里又一次使用了“Hello World”。 (src\hello.rb) p "Hello World" 用如下命令进行编译: jruby %JRUBY_HOME%\bin\jrubyc src\hello.rb
然后,这样来执行它: java -cp .;%JRUBY_HOME%\lib\jruby.jar ruby.src.hello
是不是觉得有点奇怪?为什么这个类是ruby.src.hello?在看过命令行参数后你就知道了。它的命令行格式如下: jrubyc [options] (FILE|DIRECTORY)
jrubyc有3个参数:
现在,重新编译一下src\hello.rb: jruby %JRUBY_HOME%\bin\jrubyc -d src -p "" src\hello.rb
java -cp .;%JRUBY_HOME%\lib\jruby.jar hello 接下来,找些有require、include或别的什么东西的Ruby文件。把它们放到一个目录里,假设名字是dir。运行如下命令: md classes
jruby %JRUBY_HOME%\bin\jrubyc -t classes -d dir -p "" dir 如果一切正常,看一下classes目录,所有的文件都在那里了。因为你在源代码中引用了些别的东西,请一定告诉java到哪里去寻找这些文件。例如dir\complex_ruby_script里require 了yaml。 java -cp .\classes;%JRUBY_HOME%\lib\jruby.jar;%JRUBY_HOME%\lib\ruby\1.8 complex_ruby_script
此时应该可以看到Ruby程序的结果,也许我该说是Java程序的:-) |
|||||||
返回顶楼 | |||||||
发表时间:2008-08-28
首先谢谢楼主分享经验!
近期也碰到类似的需求,但是感觉找来找去也找不到一个相对完整的对一个JRUBY工程的.rb文件编译为.class文件的说明。看了楼主的事例以后,我理解仍然是逐个文件的编译!我感觉这样是不是不太科学啊,而且对编译过的文件的结构路径还要重新布置,难免会出现意想不到的后果!请问楼主之后有没有找到比较成熟的对整个工程进行编译的办法啊? |
|||||||
返回顶楼 | |||||||
发表时间:2008-09-08
这个是针对非WEB的,如果你是WEB项目(也就是如果你是RAILS的),可以使用warbler。
其实如果真是大项目可以像Java中用ant来构建项目那样,自己写rake啊。 |
|||||||
返回顶楼 | |||||||
浏览 3068 次