【问题标题】:MATLAB 2016 use new guava versionMATLAB 2016 使用新番石榴版本
【发布时间】:2017-01-12 17:14:11
【问题描述】:

我正在尝试导入一个依赖于 guava-19.0 或更高版本的自定义 fat jar。我正在使用的 matlab 版本的类路径中已经有一个 guava jar,但它的版本是 15.0。我尝试从 matlab 的 classpath.txt 文件中删除 jar,但如果我这样做,matlab 将无法启动。我还尝试在我的工作目录中创建一个 javaclasspath.txt 文件,其中包含以下内容:

<before>
path/to/myjar.jar

但这也不能让 matlab 启动。 将我的 jar 直接添加到 classpath.txt 使其位于静态路径而不是动态路径中也会在启动 matlab 时给我一个错误。我正在使用 matlab 2016。

【问题讨论】:

  • 当您尝试使用较新的番石榴版本加载 Matlab 时遇到什么错误?它可能是良性的.. 无论哪种方式,都不可能让 Matlab 使用旧版本的 guava 并且您的代码使用新版本,除非您使用不同的命名空间(这是一个巨大的痛苦)重新构建 guava 本身以及您尝试加载的 jar。
  • 错误是“内部错误:桌面启动失败。详细信息:加载桌面类失败”。出现此错误,Matlab 根本无法打开。

标签: java matlab


【解决方案1】:

有一种方法,但你可能不喜欢它。问题是,通过 java 类加载系统的设计,你不可能使用两个具有相同名称和包的类(除非你去implementing your own classloader)。正如您所说,Matlab 本身与较新的番石榴版本不兼容。因此,唯一的方法是使用不同的包名称重新构建 google/guava,即从字面上将所有包名称和相应的导入更改为唯一的名称,例如将com.google.* 更改为com.google_19_0.*,并构建一个jar。然后,您需要修改要加载的 jar 的源代码以引用新包中的类,而不是原始 guava 包。这显然假设您可以修改所需 jar 的源代码。

【讨论】:

  • 不幸的是,我认为你是对的。我尝试使用新的包名称更新源代码,但我的项目中还有其他引用 guava 的 jar。他们可能也必须更新。现在我只想在 MATLAB 中运行 jar,而不是尝试导入它。
猜你喜欢
  • 2016-03-16
  • 2020-03-10
  • 2017-11-07
  • 1970-01-01
  • 1970-01-01
  • 2014-02-12
  • 2012-06-04
  • 1970-01-01
相关资源
最近更新 更多