升级后 HSQLDB 命令行关闭不再有效

HSQLDB command line shutdown no longer works after upgrade

在 Ubuntu 18.04 上,我能够使用以下一行代码关闭处于服务器模式的 运行 HSQLDB 实例:

java -cp $CLASSPATH:/usr/share/java/hsqldbutil.jar:/usr/share/java/hsqldb.jar "org.hsqldb.cmdline.SqlTool" --inlineRc=url=jdbc:hsqldb:hsql://localhost/$DB_NAME,user=SA,password= --sql="SHUTDOWN;"

升级到 Ubuntu 20.04(使用 HSQLDB 2.4.1 和 HSQLDB Utils 2.5.0)后,失败并出现以下错误:

Error: Could not find or load main class org.hsqldb.cmdline.SqlTool
Caused by: java.lang.ClassNotFoundException: org.hsqldb.cmdline.SqlTool

事实上,我在两个 JAR 中都找不到 org.hsqldb.cmdline.SqlTool,也找不到任何关于此功能消失位置的提示。

docs 提到了 sqltool.jar,但我在系统中的任何地方都找不到该文件。

SqlToolclass哪里去了?或者我还能如何从 shell 脚本关闭 运行 HSQLDB 实例?

没有官方发布的名为 hsqldbutil.jar 的 jar。对于由 GUI 客户端组成的 jar,有一个 Ant 和 Gradle 构建选项。

通过 http://hsqldb.org

下载 link 从 SourceForge 下载 hsqldb zip 包

压缩包的/lib目录包含hsqldb.jar和sqltool.jar。在您的 Java 命令中使用这些罐子。这也确保您使用的是同一发行版本的罐子,因为混合不同的发行版本将无法正常工作。

为了进一步阐述 fredt 的回答,以下是我在我的 22.04 (jammy) 工作站上用来解决问题的实际步骤:

  1. 确定您的系统是哪个版本运行(Jammy 似乎发布了 v2.6.1;用以下适当的版本替换 2.6.1):

    apt policy libhsqldb-java
    
  2. 从SourceForge下载对应版本:https://sourceforge.net/projects/hsqldb/files/hsqldb/

  3. 提取/hsqldb-2.6.1/hsqldb/lib/sqltool.jar/tmp

  4.  sudo -i
     mv /tmp/sqltool.jar /usr/share/java/sqltool-2.6.1.jar
     chown root: !$
     vi $(type -p hsqldb-sqltool)
    
  5. hsqldb.jar:之后的CLASSPATH中添加/usr/share/java/sqltool-2.6.1.jar:,然后退出vi(如果你对vi不适应就用nano )

  6. 别忘了在 Launchpad 上给 user149408 的错误投票:https://bugs.launchpad.net/ubuntu/+source/hsqldb/+bug/1909811(登录 top-right 手角;点击“这个错误影响 X 人。这个错误会影响你吗?” link 左上方票)。