部署JRuby应用变得更简单
Ruby应用和库通常是通过RubyGems分发的,但是为了利用其优势,你需要安装好Ruby和RubyGems,而这对于一般的用户来说却并不实际。对于传统的(MRI / C-Ruby)程序,该问题已经通过RubyScript2Exe[1]的方式得到了解决,这是通过将脚本和一个Ruby解释器绑定到一个可运行在多个平台上的包里面来实现的。JRuby的用户也不必为此感到沮丧,相反,他们手头上已经有了一个更加强大的工具来快速部署应用:Java Web Start。
使用Java Web Start
Java Web Start包含在Java运行时环境中,因此在大多数系统中都可以使用。使用Web Start部署应用相当简单,所需要的仅仅是一个包含所有文件和JNLP(Java Network Launching Protocol)描述文件的jar包。我们在ObjectSpace浏览器应用的基础上,来示范一下如何创建一个可以通过web-start进行部署的Ruby应用。
使用Web Start的前提是一个包含应用的jar包,我们首先从它开始。JRuby提供了两种不同的库:“最小的”jruby.jar和jruby-complete.jar,后者捆绑了整个Ruby标准库。如果你不使用标准库,那么你可以使用更小的jruby.jar,这样可以减少大约1M的下载量。
让你的脚本运行的最简单的方式就是将.rb文件添加到jruby.jar。下面的命令将我们例子中的rob.rb增加到压缩包中。
| jar uf jruby.jar rob.rb |
你可以通过java来启动应用,来检查上面的命令是否正确,而这需要我们的Ruby脚本。这个应用程序需要ObjectSpace,我们可以通过向Java传递jruby.objectspace.enabled=true属性来激活它。
| java -Djruby.objectspace.enabled=true -jar jruby.jar -r rob |
-r选项自动寻找所需文件,然后运行我们的脚本。
提早编译
JRuby1.1的一个令人激动的新特性就是对提前(ahead of time,即AOT)编译的支持。现在JRuby中有2048个方法采用即时编译,而提前编译能减轻这一限制。JRuby编译器jrubyc目前仍处在开发中,所以我建议使用最新的JRuby版本。将普通的Ruby文件编译为class文件就像通过脚本参数调用编译器那样简单:
| jrubyc rob.rb |
这会创建一个包含rob.class文件的ruby目录。这次不再需要像我们之前那样将ruby目录打包到jruby.jar中,而只需要创建一个单独的Jar来包含应用程序。毕竟修改现存的Jar看起来并不是一个优雅的方案。我们可以使用同名的工具来创建Jar:
| jar -cfe rob.jar ruby/rob.class ruby |
这会创建一个包含我们的类的名为rob.jar的小的jar文件,并且在Manifest中指定ruby/rob.class为主类。这使得我们可以简化调用,因为我们现在可以很简单地指向类,而无需使用命令行。为了执行它,我们要确保rob.jar在classpath上:
| java -Djruby.objectspace.enabled=true -cp rob.jar:jruby.jar ruby.rob |
Web Start
在我们继续编写JNLP文件前,我们需要对Jars进行签名。很不幸需要这么做,因为JRuby使用了反射,这样就需要更多的许可,你可以参阅JRuby Wiki来了解更多的细节。最简单的方法就是使用JDK自带的keytool来创建一个测试证书。
|
keytool -genkey -keystore myKeystore -alias myself keytool -selfcert -alias myself -keystore myKeystore |
从现在开始,每次你修改Jars时,必须要更新签名,否则在运行时你就会得到一个SecurityException。
| jarsigner -keystore myKeystore jruby.jar myselfjarsigner -keystore myKeystore rob.jar myself |
既然我们已经准备好Jars了,我们就来看一下JNLP文件。下面提供了对应用的一个最小配置。一些字段是规范要求的,比如title、vendor、j2se标签以及security段。jar标签代表了Jars的最终位置。它还可以使用file://形式的URL指向本地文件,在开发中这会很方便。ObjectSpace属性也需要在此设定,这可以通过property标签来完成。
| Mirko Stocker |
如果你忽略了AOT段或者仅仅想使用单个jar的方式,那么你就必须修改jnlp文件并包含-e参数,那么你的application-desc看起来应该像这样:
| [...] -r rob [...] |
最后一步是将Jars和JNLP文件上传到指定位置。现在你应该可以在浏览器或者使用shell中的javaws工具来打开链接了。
问题解决
为了让你的浏览器能通过Web Start加载应用,我们需要使用application/x-java-jnlp-file MIME类型来发布JNLP文件。因此如果你的浏览器仅仅显示了JNLP文件的内容并且javaws没有自动加载的话,你就需要改变web服务器的配置。例如,Apache需要在mime.types中增加如下指令:
| application/x-java-jnlp-file jnlp |
进一步阅读
JRuby wiki提供了关于JRuby的很多信息:http://www.erikveen.dds.nl/rubyscript2exe/
下载:code for Ruby Object Browser。
原文链接:http://www.infoq.com/cn/articles/jruby-deployment-with-webstart
| 共2页: 上一页 [1] 2 | ||
|
|
||||
| · 微软出价446亿美元收购.. · 技术人求职简历完备手册 · 北漂技术人90天求职纪实 · 勇闯IT培训黑色围城 · 隐私保护技术探讨 · Windows Server 2008专.. · ASP.NET 2.0基础开发指.. · WCF开发基础 |
· 路由器设置与口令恢复 · 华为员工自杀频频拷问.. · VC++基础开发专题 · NAC安全访问控制 · 2008年春季英特尔信息.. · Visual Studio 2005开.. · Linux——从菜鸟到高手 · 如何优化IT 控制能耗 |
|||
|
||||
| · iSCSI应用与发展 · SQL Server 2008/2005.. · SOA 面向服务架构 · SQL Server 2008/2005.. · iSCSI应用与发展 · RAID——磁盘阵列基础 · 中间件应用技术专题 · SQL Server入门到精通 |
· 病毒查杀专题 · 国际文档格式标准开战 · Linux防火墙 · 路由器设置与口令恢复 · 打造安全服务器 · SOA 面向服务架构 · PHP开发应用手册 · ADSL应用面面俱到 |
|||
|
||||
| · iSCSI应用与发展 · 中间件应用技术专题 · SQL Server入门到精通 · SQL Server 2008/2005.. · SOA 面向服务架构 · iSCSI应用与发展 · RAID——磁盘阵列基础 · 身份认证技术 |
· 病毒查杀专题 · 清除流氓软件——51CTO.. · 路由器设置与口令恢复 · SOA 面向服务架构 · 了解统一威胁管理(UTM).. · ADSL应用面面俱到 · ADSL应用面面俱到 · 反垃圾邮件技术应用 |
|||