HSQLDB - 适用于外部 Jar - 不适用于 JRE

Posted

技术标签:

【中文标题】HSQLDB - 适用于外部 Jar - 不适用于 JRE【英文标题】:HSQLDB - works with external Jar - not with JRE 【发布时间】:2010-10-04 20:04:47 【问题描述】:

使用测试应用找出生产应用和 hsqldb 的问题。

如果我在 Eclipse 中使用 hsqldb.jar 文件作为外部 jar 编译测试应用程序,则程序可以工作。但是,如果我的 JRE 系统库中只有 jar 文件,我会收到 9.0 之前的客户端尝试从数据库连接错误。

这两个文件是完全相同的文件。唯一的区别是一个被添加为外部 jar,另一个只是在类路径中。在构建生产应用程序时,它使用相同文件的类路径并生成相同的 9.0 之前的错误。

【问题讨论】:

【参考方案1】:

您要使用的 jar 是 HSQLDB 2.0 版 jar。还有第二个 HSQLDB jar,它是 1.8 版,在您的预期 jar 之前位于您的类路径中。

这是一个类路径问题。通过使用 java -verbose 或其他调试选项,您应该能够找到第二个 jar (1.8) 的位置以及它是如何进入类路径的。

[已添加] 您可以在应用程序中进行调试的另一个步骤是在连接到数据库之前打印出字段 org.hsqldb.persist.HsqlDatabaseProperties.THIS_FULL_VERSION 的值。这将打印用作客户端的 jar 版本。成功连接意味着客户端和服务器 jar 是相同的版本。

服务器实例在启动时将其版本打印到控制台。

我还建议使用来自 http://hsqldb.org/support/ 页面的 HSQLDB 的最新快照 jar。

【讨论】:

如果是这样的话,那将是有道理的。可执行 JAR 文件是在仅存在 2.0 的机器上创建的。当 JAR 在 Linux VM 上运行时,我会收到错误消息,除非我在 eclipse 中将 hsqldb.jar 添加为外部 JAR。 当我在类路径中指定 hsqldb.jar 文件时,在 Linux 上构建解决方案时出现相同的 pre-9.0 错误。我仍在努力解决这个问题,并将尝试在没有我已加载的 hsqldb.jar 文件的情况下进行测试构建。 看起来不错,可能就是这样。从系统和应用程序中删除 2.0 仍然可以工作,并且出现相同的错误。 仍然遇到问题。更多信息:使用带有实体管理器工厂的休眠,因此实际上没有直接在代码中引用 hsqldb。当我使用 java -verbose 工作应用程序时,没有 hsql 类。我仍然保留它可以工作的外部 jar - 如果只是在 JRE 目录中它没有。【参考方案2】:

通过将 hsqldb.jar 移动到类路径中的第一个声明来解决问题。

【讨论】:

以上是关于HSQLDB - 适用于外部 Jar - 不适用于 JRE的主要内容,如果未能解决你的问题,请参考以下文章

JavaFX .jar 适用于 Windows 和 OSX,但不适用于 Linux

Rails Javascript onchange 适用于 <script> 但不适用于外部

对外部 API 的 HTTP 请求适用于 .NET,但不适用于 React(CORS 问题)

HSQLDB 和唯一约束

Visual Studio 智能感知/自动更正适用于 C# 术语,但不适用于 Unity

谷歌云获取存储桶 - 适用于 cli 但不适用于 python