在JRuby中加载GAMS Java API
我正在从事一个Java/JRuby项目,该项目需要能够与GAMS交互。我知道我们可以使用JavaAPI,但如果可能的话,我真的希望能够使用JRuby访问它,因为我们希望最终添加DSL和一些其他复杂性,我对必须用纯Java实现并不感到兴奋 遵循GAMS的官方JavaAPI,我已经从命令行下载并设置了运行GAMS所需的一切,但是我不知道如何在LD_LIBRARY_路径中包含GAMS目录,并且仍然运行JRuby irb。当我跑的时候在JRuby中加载GAMS Java API,java,ruby,linux,jruby,gams-math,Java,Ruby,Linux,Jruby,Gams Math,我正在从事一个Java/JRuby项目,该项目需要能够与GAMS交互。我知道我们可以使用JavaAPI,但如果可能的话,我真的希望能够使用JRuby访问它,因为我们希望最终添加DSL和一些其他复杂性,我对必须用纯Java实现并不感到兴奋 遵循GAMS的官方JavaAPI,我已经从命令行下载并设置了运行GAMS所需的一切,但是我不知道如何在LD_LIBRARY_路径中包含GAMS目录,并且仍然运行JRuby irb。当我跑的时候 export-LD\u-LIBRARY\u-PATH=/home/w
export-LD\u-LIBRARY\u-PATH=/home/wikk/Downloads/gams24.0\u-linux\u-x64\u-64\u-sfx
然后试着用JRuby运行irb,我明白了
jruby:/home/wikk/Downloads/gams24.0\u linux\u x64\u 64\u sfx/libstdc++.so.6:找不到版本“GLIBCXX\u 3.4.15”(jruby需要)
我想这就是文档要求我运行一个调用API的Java程序所要做的,在导入所有Java类文件之前,是否有办法在irb中设置LD_LIBRARY_PATH?如果我不设置LD_LIBRARY_PATH,我可以成功地完成这项工作,但是当我尝试创建新的GAMSWorkspace对象时,GAMS告诉我它找不到主程序:
irb(main):002:0> ws = GAMSWorkspace.new
Java::ComGamsApi::GAMSException: could not find a GAMS system directory from
your environment variable, please set up properly before running a program!
from com.gams.api.GAMSWorkspace.verifySystemDirectory(GAMSWorkspace.java:335)
我做错了吗?还是API需要一些JRuby中没有实现的Java特性?最后回到这个问题,通过一些尝试和错误使其工作。我还需要使用
-J-Djava.library.path=[GAMSDIR]/apifiles/Java/api
标志运行jruby,并将[GAMSDIR]/apifiles/Java/api/gamsjavapi.jar
添加到类路径中
这一切就绪后,您可以从ruby脚本运行gams模型:
import com.gams.api.GAMSWorkspace
import com.gams.api.GAMSJob
import com.gams.api.GAMSVariable
import com.gams.api.GAMSVariableRecord
import com.gams.api.GAMSWorkspace
ws = GAMSWorkspace.new
j1 = ws.addJobFromGamsLib('trnsport')
j1.run
j1.out_db.get_variable('x').each_entry do |rec|
puts "x(#{rec.get_keys[0]}, #{rec.get_keys[1]}): level = #{rec.get_level}, marginal = #{rec.get_marginal}"
end
我在这里写作是因为它是与GAMS Java API问题相关的唯一线程 在Eclipse中,您必须转到“运行配置”并添加两件事: 1.(如前所述)向VM参数添加“-Djava.library.path=[GAMSDIR]\apifiles\Java\api\”
2.转到环境并将路径变量显式设置为[GAMSDIR]。由于某些原因,在windows中查找路径不起作用我现在已经在windows w/JRuby上实现了这一点,看起来我在上面的路径设置错误,您还需要设置java.library.path以使其正常工作。如果我能在linux上运行,我会发布一个答案