微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JRuby,Warbler和Java的CLASSPATH

我最近一直在用JRuby开发应用程序,并非常喜欢它,但是当涉及到将项目包含外部Java库的项目打包到JAR文件中时,我遇到了麻烦.如果该项目不依赖于任何外部Java库JAR文件,则我不会遇到任何问题.

下面是一个示例应用程序.运行./bin/my_proj可执行文件时,此代码可以正常工作.但是,当我将其打包为JAR文件时,由于在CLAsspATH上找不到外部Java库,因此无法加载.

解压缩应用程序的JAR文件时,可以看到它包含我的所有代码以及包含外部Java库的供应商目录.因此,一切都应该存在.

lib / my_proj / application.rb

java_import 'com.somecompany.somejavalibrary.someJavaLibraryClass'

module MyProj

  class Application < SomeJavaLibraryClass

    # Some code implementing SomeJavaLibraryClass

  end

end

lib / my_proj.rb

require 'pathname'

module MyProj

  def root
    Pathname.new(__FILE__).join('..', '..').expand_path
  end

  def start
    setup_environment

    Application.new
  end

  def setup_environment
    @setup ||= false

    unless @setup
      @setup = true

      require 'java'

      $CLAsspATH << root.join('vendor').to_s # Setup Java CLAsspATH
      $LOAD_PATH << root.join('lib').to_s    # Setup Ruby LOAD_PATH

      require 'some_java_library' # Load the external Java library from it's JAR

      require 'my_proj/application'
    end
  end

  extend self

end

bin / my_proj

#!/usr/bin/env ruby

$:.unshift File.expand_path( File.join('..', '..', 'lib'), __FILE__ )
require 'my_proj'

MyProj.start

config / warble.rb

Warbler::Config.new do |config|
  config.features = %w(gemjar compiled)
  config.autodeploy_dir = 'pkg'
  config.dirs = %w(assets bin config lib)
  config.java_libs += FileList['vendor/*.jar']
end

供应商/some_java_library.jar

# This is the external Java library

解决方法:

外部jar应位于lib文件夹中.

您可以通过执行类似的操作将它们添加代码

$CLAsspATH << "vendor/some_java_library.jar" #or loop the directory for all jars and add them

或者,您可以创建一个meta-inf / MANIFEST.MF文件并指定CLAsspATH jars

添加一条像

Class-Path: vendor/some_java_library.jar jar2-name directory-name/jar3-name

http://docs.oracle.com/javase/tutorial/deployment/jar/downman.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐