ruby on rails 3 - Jruby:如何使用第三方java库



我想使用java第三方qr码库https://github.com/kenglxn/QRGen库来生成qr码。

请指导我,因为我不知道如何在jruby中集成java库。

在这种情况下的技巧是找到如何正确导入第三方库

  • 请使用任何依赖系统下载所需的jar(我使用ant和ivy)。
  • core-2.0.jar core-3.1.0.jar javascript -2.0.jar javascript -3.1.0.jar jfreesvg-2.1.jar

build.xml for ant:

<project xmlns:ivy="antlib:org.apache.ivy.ant" name="" default="retrieve">
  <!--setproxy proxyhost="" proxyport="" proxyuser="" proxypassword=""/-->
  <target name="retrieve">
    <ivy:retrieve/>
  </target>
</project>

ivy.xml for ivy:

<ivy-module version="2.0" >
  <info organisation="" module=""/>
  <dependencies defaultconf="default">
    <dependency org="net.glxn.qrgen" name="javase" rev="2.0"/>
  </dependencies>
</ivy-module>

现在输入ant retrieve将下载并存储5个jar到lib子文件夹。

如果你没有一个依赖管理器,这里有5个jar url你需要手动下载,你需要移动到一个名为lib的子文件夹:

  • http://search.maven.org/remotecontent?filepath=net/glxn/qrgen/javase/2.0/javase-2.0.jar
  • http://search.maven.org/remotecontent?filepath=com/google/zxing/javase/3.1.0/javase-3.1.0.jar
  • http://search.maven.org/remotecontent?filepath=com/google/zxing/core/3.1.0/core-3.1.0.jar
  • http://search.maven.org/remotecontent?filepath=net/glxn/qrgen/core/2.0/core-2.0.jar
  • http://search.maven.org/remotecontent?filepath=org/jfree/jfreesvg/2.1/jfreesvg-2.1.jar

强烈建议您使用java依赖管理器,如果您希望有一天升级此代码片段中使用的java库的版本。

下一步是使用以下ruby 代码片段。rb代码在同一文件夹中。:
require 'java'
%w[
  lib/core-2.0.jar
  lib/core-3.1.0.jar
  lib/javase-2.0.jar
  lib/javase-3.1.0.jar
  lib/jfreesvg-2.1.jar
].map &method(:require)
# this is the CRITICAL line to get it to work...
include_class 'net.glxn.qrgen.javase.QRCode' 
# get QR file from text using defaults
# this will write a file (example: QRCode7247556396487679822.png) in java.io.tmpdir as defined in your JVM
file = QRCode.from("Hello World").file()
p file.name
# get QR stream from text using defaults
# if we redirect the stream as a byte array, we can have a better file control
include_class 'java.io.FileOutputStream'
stream = QRCode.from("Hello World").stream()
fos = FileOutputStream.new("QRCode.png")
fos.write(stream.toByteArray())
fos.close()
# fun with VCards
include_class 'net.glxn.qrgen.core.vcard.VCard' 
johnDoe = VCard.new("John Doe")
johnDoe.setEmail("john.doe@example.org")
johnDoe.setAddress("John Doe Street 1, 5678 Doestown")
johnDoe.setTitle("Mister")
johnDoe.setCompany("John Doe Inc.")
johnDoe.setPhoneNumber("1234")
johnDoe.setWebsite("www.example.org")
stream = QRCode.from(johnDoe).stream()
fos = FileOutputStream.new("VCard.png")
fos.write(stream.toByteArray())
fos.close()
# all generated PNG can be decoded online using http://zxing.org/w/decode.jspx

请注意: jruby和java.io.tmpdir在这个特殊的jar案例中不能很好地一起发挥作用,因为使用#file()调用QRcode创建的任何调用都会将文件存储在java.io中。Tmpdir,无论它位于哪里。您几乎无法控制文件的位置。

所以我修改了原来的代码答案,使用流来代替,并创建具有更精细控制的文件。

您可以验证使用这个有用的URL生成的所有文件:http://zxing.org/w/decode.jspx

相关内容

  • 没有找到相关文章

最新更新