【问题标题】:JAR generated by warbler cannot access included internal JAR librarywarbler 生成的 JAR 无法访问包含的内部 JAR 库
【发布时间】:2012-06-22 17:47:51
【问题描述】:

我有一个 JRuby 项目,它通过 Oracle 的 ojdbc6.jar 库使用 JDBC 连接到 Oracle 数据库。当在 Windows 7 上使用 JRuby 1.6.6 和在 OS X Lion 上使用 JRuby 1.6.5.1 运行时,该代码运行良好。我正在尝试使用 warbler 创建一个独立的 JAR 文件。运行 warble jar 后,它包含 ojdbc6.jar 但由于某种原因它不会加载/访问它。内部类路径似乎不正确,或者我没有正确配置。

存在以下目录结构。

C:\my_jruby_project\bin\my_jruby_file.rb
C:\my_jruby_project\lib\java\ojdbc6.jar
C:\my_jruby_project\Gemfile

C:\my_jruby_project\Gemfile:

source :rubygems
gem 'activerecord', '>= 3.2.3'
gem 'activerecord-jdbc-adapter', '>= 1.2.2'
gem 'ruport', '>= 1.6.3'

C:\my_jruby_project\bin\my_jruby_file.rb

require 'ruport'
require 'java'

java_import 'oracle.jdbc.OracleDriver'
java_import 'java.sql.DriverManager'
....

生成JAR文件后:

jruby -S warble jar

我执行 jar 并得到以下错误:

C:\my_jruby_project>java -jar my_jruby_project.jar
NameError: cannot load Java class oracle.jdbc.OracleDriver
         for_name at org/jruby/javasupport/JavaClass.java:1205
  get_proxy_class at org/jruby/javasupport/JavaUtilities.java:34
      java_import at file:/C:/Users/DAVIDH~1.OPE/AppData/Local/Temp/jruby8647327738550400677extract/
jruby-core-1.6.7.jar!/builtin/javasupport/core_ext/object.rb:46
           (root) at file:/C:/my_jruby_project/my_jruby_project.jar!/my_jruby_project/bin/my_jruby_file.rb:4
             load at org/jruby/RubyKernel.java:1058
           (root) at file:/C:/my_jruby_project/my_jruby_project.jar!/my_jruby_project/bin/my_jruby_file.rb:1
          require at org/jruby/RubyKernel.java:1033
          require at file:/C:/my_jruby_project/my_jruby_project.jar!/META-INF/main.rb:36
           (root) at <script>:3

C:\my_jruby_project>

生成的 JAR 包含 lib/java/ojdbc6.jar,但内部文件或路径指针似乎配置不正确。

感谢任何帮助。谢谢!

【问题讨论】:

    标签: jar jruby warbler


    【解决方案1】:

    您可能想在您的 ruby​​ 代码中设置$CLASSPATH。 类似的东西:

    require 'java'
    $CLASSPATH << "lib/java/ojdbc6.jar"
    

    我在我的 jruby on rails 项目中使用了一些额外的 jar,并在我的 environment.rb 中有以下代码,以便在我的 .war 部署中可以访问 .jars

    require 'java'
    Dir.glob("lib/*.jar").each do |jar|
      $CLASSPATH << "#{Rails.root.to_s}/#{jar}"
    end
    

    【讨论】:

    • 太棒了!做到了。非常感谢!
    • 谢谢,很有帮助。
    猜你喜欢
    • 2011-12-20
    • 2017-05-20
    • 2017-10-17
    • 2021-09-18
    • 2016-11-16
    • 1970-01-01
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多