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
标签:jar,classpath,jruby,ruby,java 来源: https://codeday.me/bug/20191122/2061412.html