java - 在 JRuby 中加载 GAMS Java API

标签 java ruby linux jruby gams-math

我正在开发一个 Java/JRuby 项目,该项目需要能够与 GAMS 交互。我知道我们可以使用 Java API,但如果可能的话,我真的希望能够使用 JRuby 访问它,因为我们希望最终添加 DSL 和其他一些复杂性,但我对必须用纯 Java 实现并不感到兴奋。

遵循官方Java API documentation对于 GAMS,我已经下载并设置了从命令行运行 GAMS 所需的所有内容,但我不知道如何将 GAMS 目录包含在 LD_LIBRARY_PATH 中并仍然运行 JRuby irb。当我运行时

导出 LD_LIBRARY_PATH=/home/wikk/Downloads/gams24.0_linux_x64_64_sfx

然后尝试用 JRuby 运行 irb,我明白了

jruby:/home/wikk/Downloads/gams24.0_linux_x64_64_sfx/libstdc++.so.6:找不到版本“GLIBCXX_3.4.15”(jruby 需要)

我认为这是文档要求我运行调用 API 的 Java 程序的方法,是否有某种方法可以在 irb 中设置 LD_LIBRARY_PATH,但在导入所有 Java 类文件之前?如果我不设置 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/GAMSJavaAPI.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

关于java - 在 JRuby 中加载 GAMS Java API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16701377/

相关文章:

mysql - 无法使用 ruby​​ gem 访问 MySQL 数据库

node.js - 如何在 Bluemix 中部署的 Node 应用程序中执行 Linux 进程?

java - 检查 Firebase 实时数据库中的值是否等于字符串

java - 基本 Java Swing JFrame 重绘

java - 按顺序比较字符串与其他字符串

ruby-on-rails - 为什么这种类似作用域的查询方式不能使用reject呢?

ruby - 必不可少的 ruby ?

在文件中创建文件系统

linux - 谁执行运行时重定位?

java - Netbeans 6.8 树和编辑器提示与构建不同步