gpt4 book ai didi

java - JRuby、Warbler 和 Java 的 CLASSPATH

转载 作者:数据小太阳 更新时间:2023-10-29 08:00:15 25 4
gpt4 key购买 nike

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

下面是一个示例应用程序。当运行 ./bin/my_proj 可执行文件时,这段代码工作得很好。但是,当我将其打包成一个JAR 文件时,无法加载外部Java 库,因为它在CLASSPATH 中找不到。

当我解包我的应用程序的 JAR 文件时,我可以看到它包括我的所有代码以及包含外部 Java 库的 vendor 目录。所以,一切都在它应该在的地方。

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 jar

并添加一行

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

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

关于java - JRuby、Warbler 和 Java 的 CLASSPATH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19321453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com