【问题标题】:Java class not found despite Jar being included [duplicate]尽管包含了 Jar,但未找到 Java 类 [重复]
【发布时间】:2020-05-14 10:50:16
【问题描述】:

我将 Docker 与 https://hub.docker.com/r/bitnami/java 映像一起使用。我有我的 jar 文件 aa.jar,它使用 Gurobi。

我正在设置环境变量,以便可以找到 Gurobi。

GUROBI_HOME=/code/gurobi811/linux64
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${GUROBI_HOME}/lib
GRB_LICENSE_FILE=/code/gurobi.lic
PATH=${PATH}:/opt/bitnami/java/bin:/opt/bitnami/java/lib:/opt/bitnami/java:/bin:/usr/bin/:/code/gurobi811/linux64/bin:/code/bin
JAVA_HOME=/opt/bitnami/java

当我运行代码时,我还将 gurobi.jar 包含在类路径中

java -cp gurobi.jar -jar aa.jar evaluate

这在一定程度上是有效的。当我不包含类路径时,我收到错误Exception in thread "main" java.lang.NoClassDefFoundError: gurobi/GRBException。例外是代码中第一次提到 Gurobi。当我包含它时,我得到 ​​p>

Exception in thread "main" java.lang.NoClassDefFoundError: gurobi/GRBExpr
java_1    |     at Alg.evaluate.main(evaluate.java:44)
java_1    | Caused by: java.lang.ClassNotFoundException: gurobi.GRBExpr

我不确定为什么这不起作用,因为所有文件都应该包含在 -cp 参数包含的 jar 中。

另外我只有 Gurobi 学术许可证,所以我不能去 Gurobi 官方支持。

【问题讨论】:

  • -jar 使 java 忽略 -cp。只考虑 jar 文件 META-INF 中定义的类路径!
  • 我认为其他问题不一样,这里的问题是环境变量

标签: java linux docker docker-compose gurobi


【解决方案1】:

前段时间我回答了一个类似的问题,但这是我的建议,它对那个人有用..尝试对您的项目进行干净的构建,然后再试一次..您甚至可以检查 jar,可能是通过删除 jar 文件来调整应用程序,并查看是否正在引用预期的 jar...另外,您使用的是什么版本的库。我不熟悉这个库,但类似的错误可能是某个特定版本的本地错误,并且可能是未来版本中修复的已知问题。为什么不尝试使用不同的版本?

【讨论】:

  • 这很有帮助,但最终没有解决,问题出在环境变量中
  • 很高兴你有 RC
【解决方案2】:

这最终是我需要更改 LD_LIBRARY_PATH 变量

LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${GUROBI_HOME}/lib:/code/gurobi811/linux64/lib

我假设 ${GUROBI_HOME} 会自动放入最后一部分,但指定它可以解决问题。我也从编译普通 .jar 转换为可运行 .jar,但不知道这是否有帮助。

【讨论】:

    猜你喜欢
    • 2012-03-15
    • 2016-12-19
    • 1970-01-01
    • 2015-01-11
    • 2015-10-04
    • 2015-01-02
    • 2017-05-16
    • 2023-03-06
    • 1970-01-01
    相关资源
    最近更新 更多